8

有没有办法加载页面,对用户隐藏?

我不能iframe在后台页面中使用,因为该页面具有破坏框架的技术。

我不能使用 XHR,因为页面有 AJAX - 我需要它的(动态生成的)DOM。

4

2 回答 2

13

恐怕除了插入 iframe 之外,您别无选择。要破坏 iframe 破坏者,您可以使用以下技术:

  • 如果X-Frames-Option: DENYiframe被webRequest. .
  • 如果框架破坏者使用类似的东西

    if (top !== self) {
        top.location.href = location.href;
    }
    

    sandbox然后通过在 iframe 上设置属性来阻止脚本导航:

    var frame = document.createElement('iframe');
    frame.sandbox = 'allow-scripts';
    frame.src = 'data:text/html,<script>' +
        'if (top !== self) { top.location.href = location.href;}' +
        'alert(" (runs the rest of the code) ");' + 
        '</script>';
    document.body.appendChild(frame);
    

    导航将被阻止而不会引发任何错误。但是,以下消息会记录到控制台:

    不安全的 JavaScript 尝试从 URL 为“(...URL of frame..)”的框架中为 URL 为“(...首页的 URL...)”的框架启动导航。试图导航顶级窗口的框架是沙盒的,但未设置“allow-top-navigation”标志。

这些方法将始终有效,除非:

  • 该页面包含<meta http-equiv="X-Frame-Options" content="deny">.
  • 框架破坏脚本实现为if (top === self) { /* run code*/ }

在这些情况下,您别无选择,只能打开一个新选项卡,阅读其内容,然后关闭它。见chrome.tabs.createchrome.tabs.remove

于 2013-06-25T14:42:26.093 回答
1

您可以使用popUnder加载数据:

var win2;
function loadPopUnder(){
win2 = window.open("about:blank","",
    width=150,height=150,scrollbars=0,resizable=0,toolbar=0,location=0,menubar=0,status=0,directories=0");
    win2.blur();
    window.focus()
}

win2.document.location.href='http://www.exampe.com/url';

实际上,在某些情况下,它们可能会在新选项卡中打开 - 您必须检查实际行为。

这也是一个独立于浏览器的解决方案的优势。

于 2013-06-25T14:56:01.807 回答