如何在没有allow-scripts

时间:2015-08-11 20:50:28

标签: javascript iframe javascript-events sandbox preventdefault

已阻止整个文档的Backspace键的默认页面导航行为。但是,当焦点位于iframe区域时,按退格键仍会导致页面导航到上一个网页。

这是一个简单的例子。第一个网页page1.html包含指向第二个网页page2.html的链接,该网页包含iframe。要重现此问题,请在Web浏览器中打开page1.html,然后单击第1页中的链接以导航到page2.html。如果鼠标聚焦在第2页中iframe区域以外的任何位置,则在按Backspace键后它将保持在同一页面(page2.html);如果鼠标聚焦在iframe区域,它将导航到上一页(page1.html)。

page1.html

<html>
<body>
This is page 1. <br/>
<a href="page2.html"> Click to page 2 with iframe. </a><br/>
</body>
</html>

page2.html

<html>
<script type="text/javascript">
    document.onkeydown = function(event) {
        if (event.keyCode === 8) {
            event.preventDefault();
        }
    };
</script>
<body>
This is page 2 with iframe.<br/>
<iframe width="200" height="50" name="box" id="box" sandbox="allow-same-origin"></iframe><br/>
</body>
</html>

在iframe区域中按下Backspace键时,不会触发document.onkeydown中的代码。当焦点在其他任何地方时,它工作正常。

我发现iframe的沙箱中是否允许使用脚本,将 page2.html 更改为以下内容会阻止焦点位于iframe区域时的页面导航。但是由于安全问题,我们的项目不允许这个iframe的脚本。

<html>
<script type="text/javascript">
    document.onkeydown = function(event) {
        if (event.keyCode === 8) {
            event.preventDefault();
        }
    };
</script>
<body>
This is page 2 with iframe.<br/>
<iframe width="200" height="50" name="box" id="box" sandbox="allow-same-origin allow-scripts"></iframe><br/>
<script type="text/javascript">
    window.frames[0].onkeydown = function(event) {
        if (event.keyCode === 8) {
            event.preventDefault();
        }
    };
</script>
</body>
</html>

如果没有iframe脚本,是否有解决此问题的方法?

提前致谢。

0 个答案:

没有答案