1

有点奇怪的请求,但我希望能够有一个父窗口:

  • 在同一个域上创建一个新的子窗口(使用window.open
  • 防止在子窗口中运行任何 javascript

目前,我可以通过在页面顶部包含以下内容在子窗口中执行此操作:

<script>
  Function.prototype.call = function() {};
  Function.prototype.apply = function() {};
</script>

这几乎可以阻止子页面中的任何 javascript 运行。但是我有什么办法可以从父窗口做到这一点?我可以在任何脚本有机会运行之前以某种方式将此代码注入子页面吗?

或者有没有其他方法可以做到这一点?

任何帮助表示赞赏

4

3 回答 3

2

您可以使用一些服务器端来删除所有<script>标签和内联事件处理程序,例如onclick.

编辑

使用客户端,您可以尝试使用 ajax 抓取整个页面,删除那里的脚本并将内容写入新创建的窗口。我认为您将无法使用

$.get('page.html', function(html) {
    var html = $(html).find('script').remove().html();
});

因为脚本在添加到 DOM 时可能会被执行,所以你可能需要使用解析器或只使用正则表达式。

于 2013-03-12T20:07:09.120 回答
2

window.open()返回对新创建的窗口的引用。如果窗口位于同一来源,您可以自由访问它。

var popup = window.open('/some/page.html');
popup.contentWindow // = the popup's `window` object

但是,您想出的代码不起作用。您可能已经看到它破坏了 jQuery,它可以自由使用calland apply,但它不会阻止正常的函数调用。

于 2013-03-12T20:35:02.477 回答
0

如果子窗口位于iframe? 有一个这样的问题,答案是——你不能用 php 服务器端轻松地做到这一点。

如何禁用 iframe 中的脚本?

于 2013-03-12T20:10:09.883 回答