javascript
  • firefox-addon
  • firefox-addon-sdk
  • 2013-10-30 85 views 0 likes 
    0

    我希望我的上下文菜單項只有在點擊的節點是鏈接時纔可見,即href是磁鏈接或洪流鏈接。但項目是可見的所有鏈接,因爲上下文功能不執行,任何人都可以幫助爲什麼上下文功能不執行?ContextMenuItem上下文功能未執行

    下面是代碼:

    exports.main = function() { 
    var cm = require("sdk/context-menu"); 
    
    var contextCode = ' self.on("context", function (node) { '+ 
            ' while(node.nodeName!="A") { node = node.parentNode; } '+ 
            ' var pat_magnet = /^magnet:/i; ' + 
            ' var pat_torrent = /.torrent$/i; ' + 
            ' if(pat_torrent.test(node.href) || pat_magnet.test(node.href)) { return true; } '+ 
            ' else { return false; } '+ 
            ' }); '; 
    
    var clickCode = ' self.on("click", function(node,data){ '+ 
            ' while(node.nodeName!="A") { node = node.parentNode; } '+ 
            ' var pat_hash = /[0-9abcdef]{32,40}/i; ' + 
            ' var result = node.href.match(pat_hash); '+ 
            ' var hash = "" ' 
            ' if(result != null) { hash=result[0]; } '+ 
            ' var xhr = new XMLHttpRequest(); '+ 
            ' if(hash != "") { '+ 
            '  var apiCall = "https://www.furk.net/api/dl/add?api_key=*************&info_hash="+hash; '+ 
            ' } '+ 
            ' else{ '+ 
            '  var apiCall = "https://www.furk.net/api/dl/add?api_key=*************&url="+encodeURI(node.href); '+ 
            ' } '+ 
            ' xhr.open("GET",apiCall,true); '+ 
            ' xhr.onreadystatechange = function(){ if(xhr.readyState = 4) { if (xhr.response.status = "ok") { alert("Torrent added to Furk."); } else { alert("Torrent could not be added to Furk."); } } } '+ 
            ' xhr.send(null); '+ 
            ' });'; 
    cm.Item({ 
        label: "Add to Furk", 
        context: cm.SelectorContext("a[href]"), 
        contentScript: contextCode + clickCode 
    }); 
    }; 
    

    回答

    1

    請隨時張貼在將來可以直接嘗試自我containied例子。

    現在回到你的問題:內容腳本實際上有一個語法錯誤。

    以下行:

    ' var pat_torrent = /.torrent$/i ' + 
    

    缺少一個分號,而應該是:

    ' var pat_torrent = /.torrent$/i; ' + 
    

    原因自動分號插入(ASI)已經不在這裏工作是: 「代碼」 實際上是不管有什麼新行的字符串。如果有換行符,那麼ASI會工作。不支持內聯腳本的另一個原因是內聯腳本。看看contentScriptFile

    該錯誤實際上被記錄下來,但演示文稿很糟糕。在瀏覽器控制檯:

    [20:57:51.707] [object Error] (expandable)

    在終端:

    console.error: context-magnet: Message: SyntaxError: missing ; before statement

    這裏是一個固定的,可重複的樣品:

    var cm = require("sdk/context-menu"); 
    var contextCode = ' self.on("context", function (node) { '+ 
            ' while(node.nodeName!="A") { node = node.parentNode; } '+ 
            ' var pat_magnet = /^magnet:/i; ' + 
            ' var pat_torrent = /.torrent$/i; ' + 
            ' if(pat_torrent.test(node.href) || pat_magnet.test(node.href)) { return true; } '+ 
            ' else { return false; } '+ 
            ' }); '; 
    cm.Item({ 
        label: "magnet test", 
        context: cm.SelectorContext("a[href]"), 
        contentScript: contextCode 
    }); 
    

    編輯' var hash = "" '有同樣的問題,並且有可能是我錯過了瀏覽這個新代碼的其他類似錯誤。 正如我已經說過的,請使用contentScriptFile而不是contentScript用於長期腳本。

    另一個編輯

    這裏是a builder使用contentScriptFile,在這裏我也修正了幾個其他錯誤,其中最重要的是:

    • 使用permissions從而使XHR將工作。
    • 正確設置XHR使用responseTypeoverrideMimeType()。使用onload/onerror代替onreadystatechange
    +0

    thanx爲您回覆!我已經編輯了代碼並給出了完整的代碼,現在我按照您的建議插入了分號,但每個仍然顯示相同的問題上下文菜單項,而不僅僅是指向.torrent或磁鏈接的鏈接 –

    +0

    另一個編輯,現在有一個完整的工作示例(當然,減去缺失的api鍵;) – nmaier

    相關問題