kto*_*hie 7 javascript google-chrome-extension firefox-addon-webextensions
我正在将Chrome扩展程序移植到Firefox WebExtensions,我一直在寻找解决方法chrome.declarativeContent.onPageChanged
.
我的FF Webextension包含在某些网站上导航时必须显示的页面操作.但是,可用API中的所有侦听器似乎都不允许这样做.
特别是我试过:
chrome.runtime.onInstalled.addListener(onChange);
chrome.tabs.onCreated.addListener(onChange);
chrome.tabs.onActivated.addListener(onChange);
chrome.tabs.onUpdated.addListener(onChange);
chrome.webNavigation.onDOMContentLoaded(onChange);
chrome.webNavigation.onCreatedNavigationTarget(onChange);
Run Code Online (Sandbox Code Playgroud)
有没有已知的解决方法?
您必须手动显示pageAction,因为尚不支持 declarativeContent API .
chrome.pageAction.show(tabId);
chrome.pageAction.hide(tabId);
Run Code Online (Sandbox Code Playgroud)
如果规则基于URL匹配,则实现非常简单:
chrome.tabs.onUpdated.addListener(function(tabId, changeInfo, tab) {
if (changeInfo.status === 'complete' && tab.url.match(/something/)) {
chrome.pageAction.show(tabId);
} else {
chrome.pageAction.hide(tabId);
}
});
Run Code Online (Sandbox Code Playgroud)
但是,如果它是基于DOM元素的,你将不得不使用内容脚本:
chrome.tabs.onUpdated.addListener(function(tabId, changeInfo, tab) {
if (changeInfo.status === 'complete' && tab.url.match(/something/)) {
chrome.tabs.executeScript(tabId, {
code: 'document.querySelector(' + JSON.stringify(someSelector) + ')'
}, function(results) {
if (results[0]) {
chrome.pageAction.show(tabId);
} else {
chrome.pageAction.hide(tabId);
}
});
} else {
chrome.pageAction.hide(tabId);
}
});
Run Code Online (Sandbox Code Playgroud)
这是一个非常简化的代码.可以增强它以在页面加载时查找元素.
归档时间: |
|
查看次数: |
876 次 |
最近记录: |