4


我在寫一個Chrome擴展,它爲用戶訪問的某些頁面添加了功能。
要做到這一點,我需要注入一些頁面需要能夠調用的變量和函數。
這些變量/函數是在內容腳本中生成的。從Chrome擴展插入頁面的函數/變量

但是,由於內容腳本運行在僻靜的環境中,主機頁面無法訪問它。

根據這篇文章: http://code.google.com/chrome/extensions/content_scripts.html#host-page-communication 內容腳本和主機頁面可以通過添加事件通過DOM進行通信。
但是,這是一個可怕的方式來做事情,我真的很想看到一些方法來輕鬆地注入方法/變量。

有沒有這種可能性?

謝謝!

+3

[構建一個Chrome擴展 - 使用內容的頁面注入代碼腳本](http://stackoverflow.com/questions/9515704/building-a-chrome-extension-inject-code-in-a-page-using-a-content-script)是注入變量/在頁面中起作用。但是,如果您還想將消息傳遞迴擴展,則無法避免事件處理程序。 –

回答

4

如果仍然感興趣的人,我我們發現了一個通過消息在內容腳本和頁面本身之間進行通信的解

像這樣的事情在發送腳本:

window.postMessage({ type: "messageType", params: { param: "value", anotherParam: "value" } }, "*"/*required!*/); 

,然後在接收腳本做這樣的事情:

window.addEventListener("message", function(event) { 
     // We only accept messages from ourselves 
     if (event.source != window) 
      return; 

     switch (event.data.type) { 
     case "blabla": 
      // do blabla 
      // you can use event.data.params to access the parameters sent from page. 
      break; 
     case "another blabla": 
      // do another blabla 
      break; 
     } 
    }); 
0

這裏是我如何編碼它在我的擴展,http://pagexray.com/extension/

您的manifest.json

"content_scripts": [ 
    { 
     "matches": ["http://*/*"], 
     "js": ["script.js"] 
    } 
], 

您的script.js

(function(){ 
    var script = document.createElement('script'); 
    script.src = "http://example.com/external.js"; 
    script.addEventListener('load', function() { }); 
    document.head.appendChild(script); 
})(); 
+0

這並不能真正回答我的問題。 JS文件位於擴展名中,不在http:// url中。 – Svarog