0

这是我想要实现的目标:

  • 我们使用 Zendesk 进行客户服务。
  • Zendesk 提供了将私有应用程序添加到支持界面的可能性。
  • 我们正在尝试确定我们何时真正处理票务,价格高昂地在票务界面回答或填写信息。

在此处输入图像描述

私有应用程序是我们唯一可以控制 Iframe / Javascript 的东西。

我们已经可以看到的东西:

  • 如果我们将浏览器选项卡从选项卡 A 切换到选项卡 B(事件:非活动)
  • 如果我们切换回选项卡 A(事件:活动)

问题:

  • 当单击屏幕的 Zendesk 部分时,我的应用程序根据我们看到的事件失去焦点。
  • 单击 App 部分返回焦点。
  • 当我们 ALT + Tab 离开浏览器(例如进入另一个应用程序)时,不会触发任何事件,除非:之前点击了 iframe。

这是用于应用程序的代码:

var hidden, visibilityChange;
var visability;
var client;

if (typeof document.hidden !== "undefined") {
  hidden = "hidden";
  visibilityChange = "visibilitychange";
} else if (typeof document.mozHidden !== "undefined") {
  hidden = "mozHidden";
  visibilityChange = "mozvisibilitychange";
} else if (typeof document.msHidden !== "undefined") {
  hidden = "msHidden";
  visibilityChange = "msvisibilitychange";
} else if (typeof document.webkitHidden !== "undefined") {
  hidden = "webkitHidden";
  visibilityChange = "webkitvisibilitychange";
}

var supported = !(
  typeof document.addEventListener === "undefined" || hidden === undefined
);

if (supported) {
    document.addEventListener(visibilityChange, onVisibilityChange, false);
}

function isTabVisible() {
  return supported && !document[hidden];
}

// === tailor to your needs === //
function onVisibilityChange(){
    visability = isTabVisible();
    console.log('[Visibility] Tab visibility changed. Visible ?', isTabVisible());
    main(client);
    // add Main here?!
}



document.onfocus = function() {
    console.log('App is on focus');
};

document.onblur = function() {
    console.log('App is blurred');
};

$(function() {
    client = ZAFClient.init();
    client.invoke('resize', {width: '100%', height: '375px'});
    main(client);
});



async function main(client) {
    visability = isTabVisible();
    console.log("[Visibility] Visible in Main?", isTabVisible());
};

Blur and Focus 的部分是我多次阅读的部分,这对我们有用,但前提是之前点击了“我的应用程序”部分

document.onfocus = function() {
    console.log('App is on focus');
};

document.onblur = function() {
    console.log('App is blurred');
};

有没有办法获得想要的行为:只要我们在浏览器窗口上,无论是应用程序还是其他地方,保持焦点或触发模糊事件?

编辑:尝试了以下代码:

    window.top.onfocus = function() {
    console.log('Top is on focus');
      };

    window.top.onblur = function() {
        console.log('Top is blurred');
    };

这给了我错误信息:

未捕获的 DOMException:访问跨域对象上的属性“onfocus”的权限被拒绝

4

0 回答 0