在我的 SPA 应用程序中,我有一个属于另一个内部应用程序的 iFrame。我希望我的应用程序在用户尝试从内部应用程序的新选项卡中打开任何链接时重新加载。我怎样才能做到这一点?
我尝试通过附加代码实现上述行为,但在新选项卡中打开链接时它不起作用。
const isIframe = () => {
try {
return window.self !== window.top;
} catch (e) {
return true;
}
};
const redirectIfIframe = (url) => {
let previousUrl = url;
const observer = new MutationObserver(function (mutations) {
if (location.href !== previousUrl) {
previousUrl = location.href;
window.location.href = url;
if (isIframe()) {
window.location.href = url;
}
}
});
const config = { subtree: true, childList: true };
observer.observe(document, config);
};
由于跨域限制,在大多数情况下,您无法在 iframe 中监听点击事件。
如果您不需要在原始选项卡的 iframe 中打开链接,请将 iframe 沙箱设置为:
sandbox="allow-same-origin allow-scripts"
.
另一种方法是将您的应用程序放入 Electron。