我是Chrome扩展程序的新手,但我想弄清楚如何延迟显示page action
图标,直到我准备好它为止。
我有一个内容脚本(在DOM准备好之前等待执行)并且所有操作都是从页面获取URL。
chrome.runtime.sendMessage({"url": getUrl()});
function getUrl() {
var url = $('meta[itemprop=contentURL]').attr('content');
return url;
}
在我的background.js页面中,我使用declarativeContent
查看是否应显示页面操作。这与Google示例非常相似,如果不相同。
chrome.runtime.onInstalled.addListener(function(details) {
chrome.declarativeContent.onPageChanged.removeRules(undefined, function() {
chrome.declarativeContent.onPageChanged.addRules([rule1]);
});
});
var rule1 = {
conditions: [
new chrome.declarativeContent.PageStateMatcher({
pageUrl: { urlContains: 'www.example.com', schemes: ['http', 'https'] }
})
],
actions: [ new chrome.declarativeContent.ShowPageAction() ]
};
我设置了一个监听器来获取content_script
chrome.runtime.onMessage.addListener(
function(request, sender, sendResponse) {
url =request.url; //set global variable in background.js so I have it
sendResponse({});
});
最后,我点击了页面操作后的操作。
chrome.pageAction.onClicked.addListener(function(tab) {
alert(url);
});
此代码有效。但是,如果我在页面加载过程中过早按下page_action按钮,我将收到undefined
警报,因为在执行内容脚本并传递消息之前,页面操作已显示/可用。
在内容脚本执行并设置了网址之前,如何延迟显示网页操作图标?
谢谢!
答案 0 :(得分:2)
您不必使用内容脚本来获取选项卡的URL。只需使用tab.url
(其中tab
是chrome.pageAction.onClicked
事件收到的第一个参数)来获取网页的网址:
chrome.pageAction.onClicked.addListener(function(tab) {
alert(tab.url);
});
如果页面操作ico 的有用性确实取决于只能在内容脚本中获取的页面状态,那么请不要使用chrome.declarativeContent
API,而是调用{ {3}}代替:
var url;
chrome.runtime.onMessage.addListener(function(request, sender, sendResponse) {
url = request.url; // Save some state
chrome.pageAction.show(sender.tab.id);
});