gpt4 book ai didi

javascript - 如何检测浏览器何时阻止 iFrame

转载 作者:行者123 更新时间:2023-12-05 06:22:17 24 4
gpt4 key购买 nike

在 https 网站上,我试图将随机提交的 URL 加载到 iframe 中,让用户可以看到嵌入在我自己的用户界面中的网站。

只要远程 url 是 https(比如我自己的站点),并且远程服务器没有明确阻止自己嵌入到 iframe 中,该网站就可以在 iframe 中正常显示。我知道如何创建一个服务器端脚本,该脚本可以预先检测 iframe 是否会由于第 3 方的故意 iframe 阻塞而被阻塞。

但是,iframe 被浏览器(而不是第 3 方服务器)阻止的原因有很多:

  1. 如果远程 url 不是 https,或转发到非 https url,它将(被浏览器)阻止在 iframe 中显示。
  2. 如果远程站点确实是 https,但至少包含一个由 http(而不是 https)提供的资源,浏览器将阻止由于 mixed content 的 iframe .

我的问题具体如下:当浏览器 阻止了 iframe 时,如何使用客户端 javascript 进行检测。我希望我的客户端 javascript 检测该 block 和 block 的原因(我知道如何记录,如果我能检测到的话)。

总而言之,我已经知道如何检测第 3 方何时阻止 iframe(使用服务器端脚本),我只对显示如何检测网络浏览器的答案感兴趣正在执行阻止以及如何使用客户端 javascript 进行检测。

我可以在控制台 (shift-ctrl-i) 中看到这些非致命 block ,但我不知道如何在运行时以编程方式检测它们,然后通过提供一条消息来优雅地处理这些 block block 和链接,以便用户可以在新选项卡中打开资源。例如,我通常使用 try/catch 语句捕获错误,但我不知道如何捕获由于 iframe 源位置而发生的这些浏览器级错误,这些错误似乎只出现在控制台中。

我的首要任务是,每次未被阻止时在 iframe 中显示该页面,并在每次被阻止时以编程方式执行其他操作。

这行不通,但这是我尝试过的一个例子:

window.addEventListener('error', function(event)
{
console.log(`Caught Using Javascript`, event);
});

错误显示在控制台中,但“Caught Using Javascript”不会: enter image description here

最佳答案

似乎您的解决方案就在这里 ->

https://www.whatismybrowser.com/developers/tools/iframe

另一种检查方法是使用 if else 语句(错误处理)

if ( window.location !== window.parent.location ) {
// The page is in an iframe
} else {
// The page is not in an iframe
}

关于javascript - 如何检测浏览器何时阻止 iFrame,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59336591/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com