1

我有一个加载本地页面(代理)的 iframe:我需要不执行这些页面中的 Javascript(我已经在服务器上执行它,在客户端再次执行它会导致双重执行,因此不好)。

我可以通过使用新的“沙盒”参数来实现这一点。

问题是我需要能够将事件从主窗口添加到 iframe 内容。这似乎不起作用。

我准备了一个使用jsfiddle的示例。

<iframe 
id='iframe1' 
sandbox='allow-top-navigation allow-same-origin allow-forms'
srcdoc='<html><head></head><body><div id="test">iframe1</div><script>document.body.style.backgroundColor="yellow"</script></body></html>'>
</iframe>

<iframe
id='iframe2'
srcdoc='<html><head></head><body><div id="test">iframe2</div><script>document.body.style.backgroundColor="yellow"</script></body></html>'>
</iframe>
$('iframe').load(function() {
    var id = this.id;

    //this works in both iframes
    $(this).contents().find("#test").html(id+" says gnek!");

    //I need this to work for iframe 1, too.
    $(this).contents().on("click", function(event) { 
        alert("clicked "+id);
    });
});

可以看到,frame1 是沙盒的,不执行内部 JS(背景没有变黄)。但是,我可以在父窗口中使用 JS 更改其内容。

有没有办法添加事件呢?如果不是,那么将页面加载到 iframe 中而不让它执行其 javascript 的最佳方法是什么?

4

1 回答 1

1

将事件附加到沙盒 iframe 的内容与从 iframe 运行 javascript 相同,因此无法完成。

<head>我通过在文档中添加以下内容来解决停止 JS 执行的问题:

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

编辑:似乎这还不够。我最终决定简单地<script>从文档中删除块。

于 2013-06-22T15:37:32.417 回答