2012-07-11 48 views
0

this指導,我做了一點變化,我不斷收到此錯誤self.port是不確定的誤差在Mozilla插件SDK 1.8]

self.port在基地未定義 .js文件[我的內容代碼]

這裏我附加代碼

PageMod({ 
    include: [data.url('base.html')], 
    contentScriptWhen: 'start', 
    contentScriptFile: [data.url('jquery-1.7.2.min.js'),data.url('jquery-ui-1.8.21.custom.min.js'),data.url('base.js')], 
    contentStyleFile: [data.url('css/mint-choc/jquery-ui-1.8.21.custom.css'),data.url('css/base.css')], 
    onAttach: function(worker) { 
      worker.port.on("request", function(txt) { 
       console.log(txt); 
       worker.port.emit("response","response for "+txt); 
      }); 
    } 
}); 

和我內容代碼

// initialized by jQuery 
$(function() { 
    self.port.on("response",function(txt){console.log("response "+txt);}) //this line is where the error point to. 
    $('#tabs').tabs(); 
    testLoadLinks(); 
}); 

function testReceiveRequest(request) { 
    console.log('received:',request); 
    self.port.emit("request",request); 
} 

我使用的是SDK版本1.8瀏覽器編輯,有人可以幫我解決這個問題?

+0

對於我在內容腳本中使用self.port的情況,我不清楚什麼是壞的,以及像這樣的例子(https://builder.addons.mozilla.org/addon/1065275/latest/)可以正常工作。 – canuckistani 2012-07-11 23:27:04

+0

@canuckistani我複製了你的代碼,並在main.js中改變了第14行,你忘記了worker.on中的端口,它的工作方式應該如此。但是當我拉螢火蟲並鍵入self.port.emit('from-content-script','test123')我仍然得到self.port是未定義的錯誤,這個函數只能在有限的時間內使用嗎?在我的代碼中,只有當DOM準備就緒時,jQuery纔會調用該函數,也許當DOM準備就緒時,self.port已經「消失」了? – 2012-07-12 01:02:18

+0

'self.port.on'只存在於內容腳本的單獨範圍內,並且絕對沒有在主頁面範圍中定義。有關內容腳本的更多信息,請參閱文檔:https://addons.mozilla.org/en-US/developers/docs/sdk/1.8/dev-guide/guides/content-scripts/index.html – canuckistani 2012-07-12 06:57:28

回答

1

一些測試和調試後,我發現我的兩個錯誤,我很抱歉,我沒有把整個代碼,因爲我認爲這是不相關:

base.html文件有這個

<link type="text/css" href="css/mint-choc/jquery-ui-1.8.21.custom.css" rel="stylesheet" /> 
<link type="text/css" href="css/base.css" rel="stylesheet" /> 
<script type="text/javascript" src="js/jquery-1.7.2.min.js"></script> 
<script type="text/javascript" src="js/jquery-ui-1.8.21.custom.min.js"></script> 
<script type="text/javascript" src="js/base.js"></script> 

,這對main.js

PageMod({ 
include: [data.url("base.html")], 
contentScriptWhen: 'start', 
contentScriptFile: [data.url('jquery-1.7.2.min.js'),data.url('jquery-ui-1.8.21.custom.min.js'),data.url('base.js')], 
contentStyleFile: [data.url('css/mint-choc/jquery-ui-1.8.21.custom.css'),data.url('css/base.css')], 
onAttach: function(worker) { 
     console.log("attaching...") 
     worker.port.on("request", function(txt) { 
      console.log(txt); 
      worker.port.emit("response","response for "+txt); 
     }); 
} 
}); 

我的腳本是在/ data/js /文件夾,因此無法找到它們,因此未在main.js中加載腳本的pageMod部分,但它們正由DOM內的內容腳本本身加載,其中self.port未定義。我只是從base.html中刪除了腳本和樣式標記,因爲它們已經在pageMod中,並修復了data.url('js/base.js')和其他的路徑。現在我瞭解到附加範圍中的腳本可以訪問DOM範圍並對其進行更改,但DOM內部的腳本無法(它們可以)與附加範圍進行通信。如果您希望腳本與加載項進行交互,則應將它們留在加載項範圍中。我希望能幫助犯同樣錯誤的人。 謝謝canuckistani。

+0

嗨!你能幫助我解決類似的問題嗎? – user2543953 2016-08-03 11:40:44

+0

@ user2543953,如果您有新問題,請點擊[Ask Question](問問題)(http://stackoverflow.com/questions/ask)按鈕。如果有助於提供上下文,請包含此問題的鏈接。 – Makyen 2016-08-03 14:54:56