这是我想要实现的目标:
- 我们使用 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”的权限被拒绝