簡體   English   中英

使用require.js調試chrome擴展中的內容腳本時遇到問題

[英]Trouble debugging content scripts in a chrome extension using require.js

要在內容腳本中加載模塊,我使用以下代碼(來源http://prezi.com/rodnyr5awftr/requirejs-in-chrome-extensions/ ):

require.load = function (context, moduleName, url) {
    var xhr;
    xhr = new XMLHttpRequest();
    xhr.open("GET", chrome.extension.getURL(url) + '?r=' + new Date().getTime(), true);
    xhr.onreadystatechange = function (e) {
        if (xhr.readyState === 4 && xhr.status === 200) {
            eval(xhr.responseText);
            context.completeLoad(moduleName)
        }
    };
    xhr.send(null);
};

通過Chrome控制台進行調試時會出現問題。 每當我的一個模塊出現錯誤時,它只會報告匿名函數中發生的錯誤,但不會通知我該模塊中的哪個require.js模塊或行發生了錯誤,而是始終指向該模塊中的eval行。以上腳本。

由於很多人在使用帶有chrome擴展的require.js時似乎正在使用上述代碼的不同變體,因此必須有一種簡單的方法來在調試控制台中獲取更多信息,我只是不這樣做:)。

謝謝你的幫助!!

更新4/1:更改上面的eval()語句以使用Function()似乎解決了問題,因為chrome控制台添加了附加信息。 (這項工作的功勞歸於這個問題 )。

我意識到這兩個功能並不完全可以互換(見這個問題 )。 如果有人知道在上面的代碼中使用Function()而不是eval()的任何陷阱,請告訴我!

你可以改變這條線

        eval(xhr.responseText);

通過

        eval(xhr.responseText + "\n//@ sourceURL=" + url);

通過這種方式,您可以在原始網址下看到源代碼面板中列出的所有版本代碼。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM