2009-04-23 71 views
52

是否可以通過在網頁中運行的JavaScript代碼將消息添加到Firefox的內置錯誤控制檯?從JavaScript登錄到Firefox錯誤控制檯

我知道我有Firebug,它提供了一個console對象和它自己的錯誤控制檯,但我之前正在尋找一個快速修復程序,並且找不到任何東西。

我想這可能根本不可能,以防止惡意網頁垃圾郵件日誌?

回答

32

您不能直接從不可信JavaScript(例如來自頁面的腳本)寫入控制檯。然而,即使安裝Firebug不吸引你,我建議檢查Firebug Lite,這不需要安裝到瀏覽器中(事實上,它甚至不需要Firefox)。這是一個可以包含到任何網頁(甚至是動態的)的腳本,它會給你一些基本的Firebug功能(如console.log())。

+0

有趣的是,我會牢記這一點。 – 2009-04-23 22:06:37

+0

而在* * SeaMonkey的瀏覽器(這也是*壁虎*的),你可以通過`browser.dom.window.console.enabled`隱藏偏好啓用記錄到JavaScript控制檯(因爲2.11,見[錯誤739965] (https://bugzilla.mozilla.org/show_bug.cgi?id=739965))。這不會影響* FireBug *,因爲所有`console.log(...)`結果都會立即顯示在其控制檯中,而不管前綴如何。 – Bass 2016-02-11 15:15:28

3

AFAIK,這是不可能的。但是,如果您對Firefox擴展如何與錯誤控制檯交互感興趣,請致電check this out

+0

+1 Components.utils.reportError - 我總是忘記它是如何的號召,浪費時間找了一遍,一遍又一遍! – Stefano 2011-09-07 11:40:24

6

我只想安裝Firebug並使用console.log。如果你不能做到這一點,但是,你總能拋出一個錯誤:

throw "foobar"; 
throw new Error("bazquux"); 

當然,這將打破你出去,你當前正在執行的代碼,所以你不能用它來詳細的日誌記錄,但如果你可以解決這個問題,我認爲這是獲得開箱即用的唯一方法。

+0

我並不反對安裝Firebug(我現在已經擁有),我只是想知道。顯式拋出錯誤不是一種選擇,因爲我正在跟蹤我的代碼。 – 2009-04-23 22:05:09

+2

如果你想要一個非阻塞的錯誤信息(例如,監控一個循環中的變量),使用setTimeout(「throw new Error('Wheeeeeeee!')」,0); – 2009-12-15 20:09:28

+2

bazquux完全是我想通知自己的錯誤類型 – bobobobo 2010-01-18 04:30:33

1

如果您有興趣,請查看我編寫的腳本 - 這是一個「便宜」的Firebug替換品,不會干擾任何普通控制檯(如Safari或Chrome),但可以擴展幾乎所有的Firebug方法:

http://code.google.com/p/glentilities/

看看引擎蓋下,你就會明白我的意思的「便宜」。 :-)

將它與YUI或json.org的JSON序列化程序結合使用來對複製console.dir進行排序。

螢火蟲螢火蟲和精簡版絕對是更好的圖形用戶界面,但我用我家種的一個時刻都在保持安全記錄,甚至生產代碼 - 沒有不變評論&取消註釋,

33

是,你可以= P

function log(param){ 
    setTimeout(function(){ 
     throw new Error("Debug: " + param) 
    },0) 
} 

//Simple Test: 
alert(1) 
log('This is my message to the error log -_-') 
alert(2) 
log('I can do this forever, does not break') 
alert(3) 

更新到一個真正的功能

這是一個簡單的黑客,只是爲了好玩。

+5

至少使用一個真正的功能而非eval'd串...... – nornagon 2011-04-29 01:23:04

46

如果你定義一個全局函數來檢查window.console的存在,你可以使用Firebug的追蹤和仍然起着很好的與其他瀏覽器和/或如果你打開Firebug的控制檯跟蹤功能:

debug = function (log_txt) { 
    if (typeof window.console != 'undefined') { 
     console.log(log_txt); 
    } 
} 

debug("foo!"); 
2

此功能不需要任何擴展或庫。但是,它授予相關網站全部特權。不用擔心,因爲你是開發它的人,對吧?


// Define mylog() function to log to Firefox' error console if such a 
// thing exists 
function defineMyLog() 
{ 
    // Provide a useless but harmless fallback 
    mylog = function(msg) { }; 
    // return; // disable in production 

    if (typeof(netscape) === "undefined") { 
     // alert("Logging implemented only for Firefox"); 
     return; 
    } 
    // The initial auth popup can be avoided by pre-setting some magic user_pref 
    // ("capability.principal.codebase.p0.granted", "UniversalXPConnect"), etc. 
    try { 
     netscape.security.PrivilegeManager.enablePrivilege('UniversalXPConnect'); 
    } catch (e) { // User has denied privileges 
     // alert(e.name + ": " + e.message); 
     return; 
    } 
    ffconsoleService = Components.classes["@mozilla.org/consoleservice;1"] 
           .getService(Components.interfaces.nsIConsoleService); 
    mylog = function (msg) 
    { 
     netscape.security.PrivilegeManager.enablePrivilege('UniversalXPConnect'); 
     ffconsoleService.logStringMessage(new Date().toLocaleTimeString() + ": " + msg); 
    } 
    mylog("Firefox logging function has been defined"); 

    // window.open("javascript:"); // this URL does not work anymore? 
} 
14

window.console在火狐4測試版6未定義即使螢火蟲1.6X.0b1是可能因爲權限問題,其他人討論啓用並開放。然而,Firefox 4有一個新的工具> Web控制檯,如果這是開放的,你有一個window.console對象和頁面上的不受信任的JavaScript代碼可以使用console.log()。 Web控制檯不穩定(請參閱https://wiki.mozilla.org/Firefox/Projects/Console),您可能需要更改about:config,YMMV中名爲devtools。*的設置。

0

今天我有一個問題,並注意到控制檯螢火蟲有不同的標籤,而我的是淨化信息中,你必須爲了看的console.log工作,而trowing錯誤選擇ALL選項!這樣簡單! ; ^)