有没有一种方法可以加载一个对用户隐藏的页面?
我无法在后台页面中使用iframe,因为该页面具有破坏框架技术。
我不能使用XHR,因为该页面具有AJAX - 我需要它的(动态生成的)DOM。
我无法在后台页面中使用iframe,因为该页面具有破坏框架技术。
我不能使用XHR,因为该页面具有AJAX - 我需要它的(动态生成的)DOM。
很抱歉,除了插入iframe,您没有其他选择。为了破解iframe buster,您可以采用以下技术:
X-Frames-Option: DENY
阻止,只需使用webRequest
API删除标头-请参见在Chrome扩展中绕过X-Frame-Options DENY?。如果frame buster使用类似于
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);
若没有任何错误发生,导航将被阻止。但控制台会记录以下消息:
在URL为“(......顶级页面的URL...)”的框架中尝试不安全的JavaScript导航,来自于被沙盒化的框架的URL为“(......帧的URL...)”,该框架试图对顶级窗口进行导航,但“allow-top-navigation”标志未设置。
除非以下情况之一发生,否则这些方法始终有效:
<meta http-equiv="X-Frame-Options" content="deny">
。if (top === self) { /* run code*/ }
在这些情况下,您无法选择其他选项,只能打开一个新标签页、读取其内容,然后关闭它。请参见chrome.tabs.create
和chrome.tabs.remove
。
onBeforeRequest
来修改响应,通过重定向到剥离了框架破解代码的 Blob URL 版本。 - Chris Broadfootframe.src = 'data:text/html;charset=utf8,' + encodeURIComponent(html);
。 - Rob Walert
为无操作函数的脚本标签。 - Rob WX-Frame-Options
头部不再起作用了(Chrome 46)。 - cprcrackvar 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';
实际上,在某些情况下它们可能会在新标签页中打开 - 您必须检查实际行为。
此外,这是一个独立于浏览器的解决方案,具有优势。
offscreenTabs
的API非常适合这个目的。不幸的是,它已经从Chromium的代码库中移除,因为它已经不再维护了。难道你不能自己做AJAX调用并根据响应构建DOM吗?否则,你就没有任何好的解决方案了(在我看来,创建一个标签然后关闭它并不好)。 - Rob W