2012-01-29 53 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

相关问题