我接管了一个显示很多好东西的“仪表板”应用程序。
显示的内容之一是由第三方网页的内容填充的div(自动刷新其自己的内容)。 不幸的是,导入的第三方网页中的javascript会影响/刷新它所在的整个页面。
有没有办法可以在我自己的页面上显示第三方页面的内容,同时沙盒化它以防止它访问/影响它所在的页面?
答案 0 :(得分:1)
我建议您使用iframe元素并将div元素放入其中
答案 1 :(得分:1)
由于跨站点脚本限制阻止您通过Ajax访问外部HTTP资源,因此必须使用(内联)帧。
我只知道一种阻止帧运行脚本的方法。但Chrome不支持此方法。
var untrusted = document.getElementById("iframe-3rd-party");
untrusted.designMode = "On"; //No script can be run from the frame any more.
如果您找到了避免跨站点限制的方法(例如:CORS, X-Access-Control-Allow),请从代码中删除脚本标记和事件处理程序。 :
//xmlhttp_responsestring holds the responseText property of the XMLHttpRequest object
xmlhttp_responsestring
.replace(/<script[^>]*?>\s*\/\/\s*<\[CDATA\[[\S\s]*?]]>\s*<\/script\s*>/gi, "")
.replace(/<script[\S\s]+?<\/script\s*>/gi,"")
.replace(/ o([nN])/g," o$1").replace(/ O([Nn])/g," O");
所有脚本标记和al事件处理程序都以这种方式被剥离:所有以空格开头,后跟“on”的字符都被HTML实体替换。文本仍然可读,而事件监听器被禁用。
请注意,最后一个代码段仅处理脚本标记和事件处理程序。它不处理外部对象,例如Java Applet和框架。有关更高级的清理功能,请参阅我的other answer。