2012-01-29 104 views
14

是否有可能在控制檯中始終提供google-chrome中的自定義功能(無論加載哪個頁面)?例如,我想有一個名爲echo的函數,它只是console.log的一個包裝。這只是節省了一些輸入,但後來我可能想創建一些有用的調試功能。將自定義功能添加到Chrome控制檯中

+1

也許你可以創建一個插件。控制檯相對於當前頁面工作,所以它應該是可行的。 – Blender 2012-01-29 05:45:49

+0

感謝您指向插件的方向。讓我們看看我是否「足夠慵懶」,真正爲那個包裝做一個... – clime 2012-01-29 06:20:15

回答

16

那麼這很容易完成。你需要的是創建一個content script。該腳本將被注入到任何頁面中,並創建一些必要的全局函數,您可以在控制檯中使用它們。最具挑戰性的部分是如何使這些自定義內容scrtip函數成爲您實際的window對象的一部分,因爲通常您不能從內容中的其他javascript代碼訪問您在內容腳本中定義的函數或變量腳本。內容腳本運行在所謂的隔離環境中。

內容腳本在稱爲孤立世界的特殊環境中執行。他們可以訪問他們注入的頁面的DOM,但不能訪問頁面創建的任何JavaScript變量或函數。它會查看每個內容腳本,就好像其上運行的頁面上沒有執行其他JavaScript一樣。反過來也是如此:頁面上運行的JavaScript不能調用任何函數或訪問由內容腳本定義的任何變量。

但有一種奇特的解決方法。
定義您的清單文件,如下所示:

manifest.json的

{ 
    "name": "Content script", 
    "version": "0.1", 
    "manifest_version": 2, 
    "content_scripts": [{ 
     "matches": ["http://*/*"], 
     "js": ["console.js"] 
    }] 
} 

和內容腳本:

console.js

function customConsole() { 
    window.myNewFunction = function() { 
     console.log("Hello I'm available from console."); 
    }; 
} 

var script = document.createElement('script'), 
    code = document.createTextNode('(' + customConsole + ')();'); 
script.appendChild(code); 
(document.body || document.head || document.documentElement).appendChild(script); 

所以您指定你的新功能就像全球功能一樣你可以在console中使用它們。
也看看這個post

+2

你和鉻巖!這真的很簡單。我可以迴應(「hello world!」);在五分鐘內:)。 – clime 2012-01-29 08:18:05

相關問題