我正在尝试检测页面是否是通过沙盒 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/ http://jsfiddle.net/mwsb8geL/show/
当您按“在线即时预订”按钮时,您会看到该错误。
一个专案喷砂机 https://www.npmjs.com/package/sandblaster可以帮助您检测您是否正在运行沙盒。
在您要测试是否为沙箱的 iframe 内,打开脚本标记并粘贴以下内容https://raw.githubusercontent.com/JamesMGreene/sandblaster/master/dist/sandblaster.js
。这是由于安全问题。
之后,就简单如下。
var result = sandblaster.detect();
if(result.sandboxed === true) {
//sandboxed
}
这里有一个demo http://jsfiddle.net/Starx/tzmn4088/我提出了另一个答案,但表明该解决方案有效。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)