我试图检测是否通过沙盒iframe加载了一个页面。这可能吗?
例如,我们提供自定义可嵌入小部件,有些人认为通过在iframe中对它们进行沙盒化可以实现智能化,但这会破坏某些内容......例如window.top.location
显然,他们可以启用我们需要的功能,但理想情况下,我应该能够执行以下操作:
"sandbox" in window.top
我也尝试过做
try {
// do something that would not work if within sandbox
} catch(e) {
}
但这不起作用,因为它是浏览器安全错误,与javascript无关。
JSFiddle实际上沙箱他们的iframe以防止window.top.location导航,所以这将是一个很好的例子来向您展示。 如果你在这里看一下这个例子:
http://jsfiddle.net/mwsb8geL/show/
按下即时预订在线按钮时,您可以看到错误。
答案 0 :(得分:1)
项目sandblaster可以帮助您检测是否正在运行沙盒。
在iframe中测试它是否为沙箱,打开脚本标记并粘贴https://raw.githubusercontent.com/JamesMGreene/sandblaster/master/dist/sandblaster.js
的内容。这是由于安全问题。
在此之后,它就像下面一样简单。
var result = sandblaster.detect();
if(result.sandboxed === true) {
//sandboxed
}
这是我为另一个答案提出的demo,但表明解决方案有效。