我正在学习如何创建Chrome扩展程序。我研究过页面操作,用于在地址栏中创建一个图标。我的代码如下:
在我的manifest.json
:
{
"manifest_version" :2,
"name" : "GTmetrix",
"description": "Test google chrome extension",
"version" : "1.0",
"page_action":{
"default_icon" : "icon.png",
"default_popup" : "popup.html",
"default_title" : "Test Google chrome extension"
},
"background": { "scripts": ["background.js"] },
"permissions" : [
"activeTab"
]
}
在我的background.js
chrome.tabs.getSelected(null, function(tab) {
chrome.pageAction.show(tab.id);
});
在我的popup.html
<html>
<head>
<script src="jquery.min.js"></script>
<script src="popup.js"></script>
<!--<script src="background.js"></script>-->
<style>
body{ background:pink}
.block{ width : 100%;}
</style>
</head>
<body>
<div class="block">
<h2>Test extension</h2>
<button id="checkpage">Check this page now!!</button>
</div>
</body>
</html>
因此,当我使用上述代码时,它显示如下:
但是当我去google或其他网页时,它不会显示图标:
我的background
出现了什么问题以及manifest.json
的使用情况以及我们使用content_script
的原因是什么?具体含义是什么?
我查看了the devguide
答案 0 :(得分:2)
您查看了Devguide页面。
你绝对必须看到的是Overview page,尤其是架构部分。它解释了different scripts (background, content, popup) do and how they interact。
例如,当您需要与打开的标签页的内容进行交互时,需要内容脚本。
加载扩展程序时加载后台脚本。所以,你的代码执行:
// Grab the currently active tab
// (this is deprecated by the way, tabs.query is the modern way)
chrome.tabs.getSelected(null, function(tab) {
// Show the button on that tab
chrome.pageAction.show(tab.id);
});
从截图中可以非常完美地使用它。
之后,您的后台脚本已完成。没有什么可以做的,它什么都不做。并且,由于需要告知要显示的页面操作,您再也不会看到该图标了。
嗯,您的背景页通常是各种活动的中心调度。您需要通过注册an event handler告诉Chrome您想对某些事情作出反应。
Amit G in his answer向&#34; hook&#34;提出了一系列chrome.tabs
API个事件。成。就个人而言,我会覆盖onUpdated
,onCreated
和onReplaced
个事件来捕捉所有页面更改。
在许多情况下,是的,但显示页面操作很幸运。它由declarativeContent
API支持,允许您设置应该显示的时间规则,让Chrome负责其余部分。
文档有很多很好的例子。
嗯,是的,因为Page Actions应该是由某些条件触发的。
如果您希望扩展程序的图标始终可见,请改用浏览器操作。
因此,除非您只需要在部分页面上显示图标,否则请改用Browser Action。
答案 1 :(得分:1)
在background.js中使用以下
chrome.tabs.onUpdated.addListener(function(id, info, tab){
showPageAction(tab);
});
chrome.tabs.onActivated.addListener(function(id, info, tab){
chrome.tabs.query({ currentWindow: true, active: true },
function (tabArray) {
if(tabArray[0]){
showPageAction(tabArray[0]);
}
});
});
function showPageAction(tab){
chrome.pageAction.show(tab.id)
}
还有其他方法。 Chrome Extension samples
PS: