[英]Cross-Origin issue with getViews()
我一直在工作,以創建一個基於Firefox WebExtensions的加載項,該加載項本質上是讀取頁面,打開本地HTML,在HTML頁面上提交表單以導航到新的URL,但是我遇到了chrome.extension.getViews()
問題chrome.extension.getViews()
一旦我打開的頁面更改了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/";
}
如您所知,一旦您離開該window
對象所在的頁面,提供給您的window
對象將不再有效。 在window
的窗口顯示與調用extension.getViews()
時相同的頁面時,該window
對象有效。 當您離開該頁面時,它立即失效。 即使您已經導航到擴展中的另一個頁面,舊的window
對象也將是無效的,因為將為新頁面創建一個新的window
對象。 但是,如果新頁面來自您的擴展程序,則可以通過對extension.getViews()
的新調用獲得一個新的window
對象。
一旦導航到擴展程序中的頁面之外, extension.getViews()
將不再為彈出window
/選項卡找到window
對象。
離開自己擴展名中的頁面的URL之后,您應該以與其他任何內容相同的方式與該頁面進行交互:使用content script 。
extension.getViews()
將獲取以下window
對象:
返回當前擴展內運行的每個頁面的Window對象數組。 例如,這包括:
- 后台頁面(如果已定義)
- 任何彈出頁面(如果已定義並加載)
- 任何選項頁(如果已定義並已加載)
- 托管與附件打包在一起的內容的所有瀏覽器選項卡
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.