2016-09-08 77 views
0

我一直在空閒時間創建一個基於Firefox WebExtensions的插件,它基本上讀取頁面,打開本地HTML,在HTML頁面上提交表單以導航到新網址,但我遇到問題chrome.extension.getViews()一旦我打開的頁面更改網址。使用getViews進行跨源問題()

如果我再利用我getViews()收到以下錯誤:

Not allowed to define cross-origin object as property on [Object] or [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); 

我-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> 

我-page.js

console.log("loaded in my-page"); 

function example() { 
    document.location.href = "https://www.google.com/"; 
} 

回答

0

正如您發現的那樣,您從window對象所在的頁面導航離開時,您提供的window對象不再有效。 window對象有效,而您打開的窗口顯示的是與撥打extension.getViews()時的相同頁面。只要您從該頁面導航離開,它就會失效。舊的window對象應該是無效的,即使您已經導航到您的擴展中的另一個頁面,因爲已經爲新頁面創建了一個新的window對象。但是,如果新頁面來自您的分機,您將能夠通過新撥打extension.getViews()來獲得新的window對象。

一旦你從一個網頁,從您的擴展中導航離開,extension.getViews()將不再找彈出/選項卡window對象。

當您離開您的擴展程序中的頁面的URL時,您應該以與其他內容相同的方式與該頁面進行交互:使用content script

extension.getViews()會得到window對象:

Returns an array of the Window objects for each of the pages running inside the current extension. This includes, for example:

  • the background page, if one is defined
  • any popup pages, if defined and loaded
  • any options pages, if defined and loaded
  • any browser tabs that host content packaged with the add-on
+0

我想我明白它失敗,但是否有意義'extension.getViews()的原因'便具有完全斷裂的擴展頁面導航離開?我發現我無法使用我的本地HTML頁面的內容腳本,所以我選擇了這個。我可能會重做一些東西,將表單注入當前網頁並從那裏開始。 – Fiji