从父窗口禁用子窗口中的javascript

时间:2013-03-12 20:03:39

标签: javascript jquery html html5

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

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

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

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

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

或者还有其他方法吗?

任何帮助表示赞赏

3 个答案:

答案 0 :(得分:2)

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

修改

使用客户端,您可以尝试使用ajax删除整个页面,然后将内容写入新创建的窗口。我认为你不能使用

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

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

答案 1 :(得分:2)

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

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

然而,您提出的代码doesn't work。您可能已经看到它破坏了jQuery,这使得callapply的自由使用,但它没有阻止正常的函数调用。

答案 2 :(得分:0)

如果子窗口位于iframe?有这样的问题,答案是 - 你不能用php serverside轻松做到这一点。

How do I disable scripts in my iframe?