How can I overwrite the window.top object using a chrome extension?
This is what I'm trying:
manifest.json
{
"name": "buster",
"version": "0.0.41",
"manifest_version": 2,
"description": "Removes iframe buster scripts",
"homepage_url": "http://google.com",
"background": {
"scripts": ["background.js"]
},
"browser_action": {
"default_title": "buster buster"
},
"permissions": [ "webRequest", "webRequestBlocking", "<all_urls>", "tabs"],
"web_accessible_resources": [
"index.html"
],
"content_scripts": [
{
"matches": ["*://*/*"],
"run_at": "document_start",
"js": ["buster.js"],
"all_frames": true
}
]
}
background.js
chrome.webRequest.onHeadersReceived.addListener(function (details) {
return {responseHeaders: details.responseHeaders.filter(function(header) {
return ((header.name.toLowerCase() !== 'x-frame-options'));
})};
}, {
types: ["sub_frame"],
urls: ["<all_urls>"]
}, ["blocking", "responseHeaders"]);
chrome.browserAction.onClicked.addListener(function (tab) {
chrome.tabs.update(tab.id, {url: chrome.extension.getURL("index.html")});
});
buster.js with all my attempts:
if (top!=self) {
alert(location.href);
//console.log(document.head.querySelector("script:not([src])").innerHTML)
window.self=window.top;
Window.prototype.__defineGetter__('top',function(){return this;});
window.top = window.top.window;
var prevent_bust = 0
window.onbeforeunload = function() { prevent_bust++ }
setInterval(function() {
if (prevent_bust > 0) {
prevent_bust -= 2
window.top.location = 'http://httpstat.us/204'
}
}, 1)
}
index.html - I'm using stackoverflow.com as an example
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<title></title>
</head>
<body style="background: #ccc">
<iframe id="ifr" src="http://stackoverflow.com/questions/37588058/inject-javascript-at-the-very-top-of-the-page-anti-iframe-buster" width="555" height="555"></iframe>
<!-- http://time.com/4356072/missing-japanese-boy-found-forest/?xid=homepage -->
</body>
</html>