在以下谷歌浏览器扩展名文件中,为什么我不能在myscript.js文件中使用jquery脚本,是否未在myscript.js文件中加载jquery,应在 list 文件中进行哪些更改才能在myscript.js中使用jquery
Manifest.json
{
"manifest_version": 2,
"name": "One-click Kittens",
"description": "This extension demonstrates a browser action with kittens.",
"version": "1.0",
"background": { "scripts": ["jquery-1.9.1.min.js","myscript.js"] },
"permissions": [
"tabs", "http://*/*"
],
"browser_action": {
"default_icon": "icon.png",
"default_popup": "popup.html"
}
}
myscript.js
alert($("#extension-command-list").val()); //undefined
alert($("#extension-command-list").html()); //undefined
$(document).ready(function() {
alert("hello world"); //not seen
});
编辑:
"background": { "scripts": ["jquery-1.9.1.min.js"] },
"content_scripts": [
{
"matches": ["https://*/*"],
"js": ["myscript.js"] or "js": ["jquery-1.9.1.min.js","myscript.js"]
}
],
最佳答案
您获得undefined
的原因是因为您未指定背景页面。
因此,。Chrome生成的背景页面看起来像
<html>
<head></head>
<body>
<script src="jquery-1.9.1.min.js"></script>
<script src="myscript.js"></script>
</body>
</html>
如您所见,没有任何元素可以选择,这就是为什么您的第一个
alert
返回return undefined
的原因。无论如何,也应显示
alert("hello world")
,因为应以任何方式触发DOMContentLoaded
或类似代码。是否可能要选择要访问的站点的元素?
如果是这样,则应将
myscript.js
放在Content Script而不是背景页面中。在那里,您可以访问站点的DOM。
所以问题是,你在做什么?
如果您确实要在后台页面中选择“元素”,则必须指定一个,
查看background pages网站可以看到,它非常简单:
编辑:
引用Browser Actions Popup。使用浏览器 Action
所以
还具有后台脚本,可访问Chrome扩展程序的Api的所有部分。
chrome.*
(如果您分别请求了权限)现在让我们说,您想例如使用某些功能扩展chrome的ContextMenu。
为此,您首先需要在后台页面中创建一个contextMenuEntry。
就像您的背景页面一次只运行一个实例,而对于扩展名的生命周期一样,一次它的实例也是如此,因此contextMenuEntry应该只包含的一个实例,该实例在您创建时就创建扩展程序将运行并在扩展程序的生命周期中保留。
现在,假设您要在一个菜单项中显示正在访问的页面的当前选定文本。
为此,您需要才能访问
chrome.contextMenus
API方法,但是内容脚本是,不允许使用。要使其正常工作,您需要通过以下方式将带有所选文本的消息传递到背景页面:
chrome.extension.sendMessage
然后,在后台页面中,您可以更新您的现有的上下文菜单以显示所选文本。
对不起,我现在想不出更好的例子