2011-07-28 237 views
7

我已經在Firefox擴展開發近日,並且遇到了一些問題:如何調試Firefox擴展

所以,在browser.xul我定義了這些線:

<overlay id="sample" xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul"> 
    <script src="jquery.js" /> 
    <script src="global.js" /> 
</overlay> 

所以,在全球.js文件我可以訪問所有的jQuery的東西,並試圖加載有一個簡單的腳本:

var inner = null; 
var o = function() { 
    var prefManager = Components.classes["@mozilla.org/preferences-service;1"].getService(Components.interfaces.nsIPrefBranch); 
    return { 
     init : function() { 
      alert('here loading inner..'); 
      $.get('http://www.example.com/script.js', function(d) { 
       alert('loaded inner script!'); 
       inner = d; 
       gBrowser.addEventListener("load", function() { 
        alert('onload'); 
       }, false); 
      }).error(function(e) { alert('error loading inner..'); setTimeout(o.init,1000); }); 
      $(this).ajaxError(function() { alert('ajaxError'); }); 
     } 
    } 
} 
window.addEventListener("load", o.init, false); 

但也不是我收到一個「裝內腳本」,也不是「錯誤加載內部」警告..​​我不要看不到錯誤c鞋墊記錄擴展中的任何錯誤...我假設$.get由於某些限制可能會導致默認失敗,但是有沒有適當的方法來正常調試錯誤?錯誤控制檯是沉默的擴展,只顯示網頁錯誤

+0

亞歷克斯,我真的希望你不是實際評估這XHR結果得到的腳本,對不對? –

+0

是的,但主要是因爲插件被製成「autoupdatable」 - 我知道這是不好的,我從來沒有這樣做在日常生活中,但在這個特定的項目,我不得不 –

+4

的一點是,如果你這樣做,那麼您正在向瀏覽器引入安全漏洞。例如,任何人在不受信任的WiFi連接上使用這樣的瀏覽器,都允許wifi路由器將任意腳本注入到Chrome中。至少在這裏使用SSL! –

回答

7

如果你看文章https://developer.mozilla.org/en/Setting_up_extension_development_environment它建議建立一些喜好,包括

javascript.options.showInConsole =真。將chrome文件中的錯誤記錄到錯誤控制檯。

+0

好吧,現在會好得多,我要用showInConsole來試試它,看看它顯示的 –

+0

有什麼錯誤!我的意思是它幫助:)現在更容易了,我用原始的xmlhttprequest替換了$ .get,現在它正在滾動:)謝謝:) –

+3

有沒有什麼辦法可以用斷點調試?錯誤控制檯與藥物上的騾子一樣有用。 (但是,還是比沒有好) – balupton

3

一般而言,可以在XUL頁面使用JQuery是有問題的,因爲它假定該文件是一個HTML DOM而非XML DOM和該windowHTML窗口,而不是一個XUL窗口。如果我是你,我會爲此使用subscript loader。要進行調試,您可以使用Venkman,雖然它有點不穩固,而我經常只會使用dump()語句來替代控制檯。

更新:看到我的評論下面關於Browser Toolbox

+0

它似乎loadSubScript無法加載外部URL(「指向要加載的腳本的URL,它必須是本地chrome :,資源:或文件:URL」),而我需要從示例中獲取它。 com/myscript.js .. –

+0

Venkman不像現在包含在Firefox中的內置瀏覽器調試器那樣穩定/可用。 – NoBugs

+0

是的,這個問題現在已經過時了。你應該發佈關於[瀏覽器工具箱](https://developer.mozilla.org/en-US/docs/Tools/Browser_Toolbox)(以前的瀏覽器調試器)的新答案,我同意這是一個很棒的新創新(它已經出現了不到一年的時間,並且每次發佈都變得更加穩定)。 –