2011-05-20 56 views
1

我試圖改變文本框(使用最新版本的附加SDK,1.05b)的內容。我能夠得到它的內容,但我無法找到我如何改變它。這裏是我的代碼的相關部分:如何更改Firefox附加SDK(Jetpack)中文本框的值?

var deasciifyItem = contextMenu.Item({ 
    label: "Label", 
    context: contextMenu.SelectorContext("input[type=text], textarea"), 
    contentScript: 'self.on("click", function (node) {' + 
       'var text = node.value;' + 
        'self.postMessage(text);' + 
        '});', 

    onMessage: function(text) { 
    if (text.length == 0) { 
     throw ("Text to convert must not be empty!"); 
    } 

    console.log(text); 
    console.log(someMyFunction(text)); 
    text = "A computed new value to replace the old value in text box!"; 
    } 
    }); 

我可以閱讀任何文本框的內容,並登錄到控制檯,但我怎麼能更改其內容,例如通過將node.value傳遞給我定義的函數來獲取node.value?我試圖將node.value作爲參數傳遞給self.postMessage函數,但它不起作用。我想要實現的是一樣的東西:

 node.value = someMyFunction(node.value); 

我也想這樣做內部

 ' node.value = someMyFunction(node.value); ' + ... 

一部分,但隨後說,someMyFunction未在此背景下定義(我知道這定義是因爲我測試了

console.log(someMyFunction(text)); 

工作)。

我被困在這一點上。有小費嗎?我既不能強迫某些MyFunction進入contentScript的範圍,也不能在'onMessage'中獲得'節點'。以前的插件SDK版本過去非常簡單,這次非常困難(至少非常不直觀)。

+0

我有完全一樣的問題 - 任何你從你的內容腳本傳遞給你的'onMessage'處理程序獲取JSONified。你甚至不能發短信回內容腳本,因爲沒有['port'(https://developer.mozilla.org/en-US/Add-ons/SDK/Guides/Content_Scripts/port)財產在其他「工人」 - 啓用插件實用程序。 – mucaho 2015-05-30 19:21:08

+0

見bug報告https://bugzilla.mozilla.org/show_bug.cgi?id=824348 – mucaho 2015-05-30 19:38:41

回答

0

如果您不能包括您的內容腳本中的整個功能(你可以把你的函數在一個單獨的文件,如果它使這更容易),那麼你可以發佈一條信息給你的內容腳本,雖然這需要一個功能在您的內容腳本中接收消息。見Working with Content Scripts

+0

這是不正確的我所知。如OP所述,目前無法將消息發回與上下文菜單關聯的內容腳本。 – mucaho 2015-05-30 19:15:37