簡體   English   中英

getViews()的跨域問題

[英]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離開后就發生了。 我應該如何與打開的網頁進行交互以解決此問題?

以下是我與超時一起入侵的一個小型娛樂活動(不是我的實際項目,只是為了顯示問題):

background.js

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);

my-page.html

<!DOCTYPE html>
<html>
  <head>
    <meta charset="utf-8">
    <script src="my-page.js"></script>
  </head>
<body>
  <h1>It's my page!</h1>
</body>
</html>

my-page.js

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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM