如何知道通过 iframe 加载的页面是否在沙箱中?
How to know if a page loaded via iframe is within sandbox?
我正在尝试检测页面是否通过沙盒 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/
您可以在按下即时在线预订按钮时看到错误。
一个项目 sandblaster 可以帮助您检测您是否 运行 被沙盒化。
在您正在测试它是否为沙盒的 iframe 中,打开您的脚本标签并粘贴 https://raw.githubusercontent.com/JamesMGreene/sandblaster/master/dist/sandblaster.js
的内容。这是由于安全问题。
这之后就简单到下面了
var result = sandblaster.detect();
if(result.sandboxed === true) {
//sandboxed
}
这里是 demo 我为另一个答案做的,但显示该解决方案有效。
我正在尝试检测页面是否通过沙盒 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/
您可以在按下即时在线预订按钮时看到错误。
一个项目 sandblaster 可以帮助您检测您是否 运行 被沙盒化。
在您正在测试它是否为沙盒的 iframe 中,打开您的脚本标签并粘贴 https://raw.githubusercontent.com/JamesMGreene/sandblaster/master/dist/sandblaster.js
的内容。这是由于安全问题。
这之后就简单到下面了
var result = sandblaster.detect();
if(result.sandboxed === true) {
//sandboxed
}
这里是 demo 我为另一个答案做的,但显示该解决方案有效。