Javascript 访问浏览器窗口

Javascript 访问浏览器窗口,javascript,google-chrome,google-chrome-extension,Javascript,Google Chrome,Google Chrome Extension,是的,您以前看过这个主题。但是,Chrome关闭了一个最常见的端口,以使用unsafeWindow与内容脚本一起使用 var unsafeWindow; (function() { var div = document.createElement("div"); div.setAttribute("onclick", "return window"); unsafeWindow = div.onclick(); })(); 现在div.onclick返回null 我的问

是的,您以前看过这个主题。但是,Chrome关闭了一个最常见的端口,以使用
unsafeWindow
与内容脚本一起使用

var unsafeWindow;
(function() {
    var div = document.createElement("div");
    div.setAttribute("onclick", "return window");
    unsafeWindow = div.onclick();
})();
现在
div.onclick
返回null

我的问题是:目前是否有其他方法通过内容脚本访问
未安全窗口
?例如,我想访问页面本身使用的jQuery

unsafeWindow.jQuery().jquery; // <- 1.9.0

unsafeWindow.jQuery().jQuery;// 嗯,我有一份决定草案给你。也许这就是你需要的

Injected.js在原始窗口范围内工作,contentscript.js在其隔离窗口范围内工作。问题是您没有unsafeWindow变量,但我认为您可以使用该变量将代码包装到某个函数中

*manifest.json

"web_accessible_resources": ["injected.js"],
"content_scripts": [{
    "matches": ["*://*/*"],
    "js": ["js/content.js"]
}],
...
contentscript.js

var internalScript = document.createElement("script");
internalScript.src = chrome.runtime.getURL("injected.js");
document.body.appendChild(internalScript);
console.log(window);
console.log(window.$);
injected.js

var internalScript = document.createElement("script");
internalScript.src = chrome.runtime.getURL("injected.js");
document.body.appendChild(internalScript);
console.log(window);
console.log(window.$);

我认为这是不可能的,因为内容脚本运行在一个单独的V8“孤立世界”,无法访问主页中的任何javascript对象。当然,您可以将jquery包含在注入页面的脚本列表中,并带有字段。但作为过程的一部分,我需要在注入的脚本和内容脚本之间创建通信。问题是他们显然不“认识”。你真的需要他们之间的x光通讯吗?我认为您需要某种Greasemonkey脚本实现,不是吗?如果是这样,包装器函数似乎可以简单地实现。我需要破解
jQuery.ajax
来应用一个
.success()
,它将内容发送到我的扩展进程。内容脚本只能访问我的jQuery。所以我黑了它,但我无法将
ajax.url
发送到我的内容脚本。问题之一是内容脚本和注入脚本都无法访问
chrome.tabs
API。