Chrome扩展程序:加载隐藏页面(不含iframe)

时间:2013-06-25 13:58:51

标签: google-chrome google-chrome-extension

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

我无法在后台页面中使用iframe,因为该页面具有帧破坏技术。

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

2 个答案:

答案 0 :(得分:10)

我担心除了插入iframe之外你没有任何其他选择。要破坏iframe破坏者,您可以采用以下技术:

  • 如果X-Frames-Option: DENY阻止了iframe,只需使用webRequest API删除标题即可 - 请参阅Getting around X-Frame-Options DENY in a Chrome extension?
  • 如果帧破坏者使用

    之类的东西
    if (top !== self) {
        top.location.href = location.href;
    }
    

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

    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 ...)的框架的导航。尝试导航顶层窗口的框架是沙箱,但未设置“允许顶部导航”标记。

除非:

,否则这些方法将始终有效
  • 该页面包含<meta http-equiv="X-Frame-Options" content="deny">
  • 框架破坏脚本实现为if (top === self) { /* run code*/ }

在这些情况下,除了打开新标签,阅读其内容,然后关闭它之外别无选择。请参阅chrome.tabs.createchrome.tabs.remove

答案 1 :(得分: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';

实际上,在某些情况下,他们可能会在新标签页中打开 - 您必须检查实际行为。

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