我一直在空闲时间创建一个基于Firefox WebExtensions的插件,它实际上是读取页面,打开本地HTML,在HTML页面上提交表单以导航到新的URL但是我遇到了问题一旦打开的页面更改了网址,我就会chrome.extension.getViews()
。
如果我重用getViews()
,我收到以下错误:
不允许在[Object]或[Array] XrayWrapper
上将跨源对象定义为属性
我跟踪了这一点,发现一旦我的本地HTML导航就会发生这种情况。我应该如何与打开的网页进行交互以解决此问题?
以下是我与超时一起入侵的小型娱乐活动(不是我的实际项目,只是为了显示问题):
var views;
function openMyPage() {
console.log("injecting");
chrome.tabs.create({
url: chrome.extension.getURL("content_scripts/my-page.html"),
active: false
}, function(tab) {
chrome.windows.create({
tabId: tab.id,
type: "normal",
state: "maximized"
}, function(window) {
setTimeout(function(){
views = chrome.extension.getViews();
for(var i = 0; i < views.length; i++)
console.log("window location: " + views[i].location + " view id: " + i);
views[1].example();
setTimeout(function(){
for(var i = 0; i < views.length; i++)
console.log("window location: "+views[i].location+" view id: " + i);
}, 5000);
}, 2000);
});
});
}
chrome.browserAction.onClicked.addListener(openMyPage);
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<script src="my-page.js"></script>
</head>
<body>
<h1>It's my page!</h1>
</body>
</html>
console.log("loaded in my-page");
function example() {
document.location.href = "https://www.google.com/";
}
答案 0 :(得分:0)
正如您所发现的那样,一旦您离开window
对象所占据的页面,您提供的window
对象就不再有效。 window
对象在您打开的窗口显示与调用extension.getViews()
时相同的页面时有效。一旦您离开该页面,它就会变为无效。即使您已导航到扩展程序中的其他页面,旧的window
对象也将无效,因为将为新页面创建新的window
对象。但是,如果新页面来自您的扩展程序,则您可以通过对window
的新调用获取新的extension.getViews()
对象。
离开扩展程序中的页面后,extension.getViews()
将不再找到弹出/标签的window
对象。
一旦您离开您自己扩展程序中的网页的网址,您就应该像使用其他任何内容一样与该网页进行互动:使用content script。
extension.getViews()
会获得window
个对象:
为当前扩展程序中运行的每个页面返回Window个对象的数组。这包括,例如:
- 背景页面,如果已定义
- 任何弹出页面,如果已定义并加载
- 任何选项页面,如果已定义并加载
- 主机内容随附加
打包的所有浏览器标签