chrome插件中遇到的坑(一)


簡單說,懂chrome插件開發的人都知道,chrome插件主要有三層(姑且這么稱謂)。這三層經緯可謂明確,可以從功能和權限的角度去理解他們:

1、background層,chrome插件底層,控制整個chrome插件的大腦,具有最高權限;

2、content層,content-script腳本工作平台,本質上是chrome插件腳本注入層,權限最低只能影響頁面DOM,不能跨域操作,但是可以通過chrome.runtime.sendMessage與background層交互;

3、popup/option層,UI交互層,權限中等,可以直接使用background的實例對象,也可以通過消息與content層交互。

 

實際開發中,經常會遇到在content層獲取數據,提交到后台server的情況,后台server與content頁面存在跨域問題。

chrome插件中解決跨域問題是比較簡單,當然,可以直接在content腳本中使用jsonp的方式跨域,也可以將需要提交的數據發送給background層,由background提交后台服務。

我采取的方式是后者,通過消息與background通信,坑兒也是在發送消息的時候碰到的。

發送消息:

chrome.runtime.sendMessage({data: "hello world!"}, function(response) {
  console.log(response);
});

坑兒:總是報錯Uncaught Error: chrome.runtime.connect() called from a webpage must specify an Extension ID (string) for its first argument

后來,通過測試發現是我調用chrome.runtime.sendMessage的時機問題,不要在content腳本注入的時候就調用該函數,換句話說就是:要在頁面加載完畢時調用該方法:

$(function(){

  chrome.runtime.sendMessage({data: "hello world!"}, function(response) {
    console.log(response);
  });

});

 

這是搞原型測試時,發現的坑,一些函數的調用(時機)沒有結合業務,所以,實際結合業務開發中可能自然就越過了該坑兒,但是,還是留個印記吧。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM