Chrome扩展:运行脚本后页面已完成加载javascript
chrome extension: run script after page has finished loading javascript
在页面加载完成时根本不会触发。基本上当我点击浏览器动作按钮时,它会触发它,在页面加载时,它会运行一个脚本。In my background.js
var toggle = false;
chrome.browserAction.onClicked.addListener(function(tab) {
toggle = !toggle;
if(toggle){
chrome.browserAction.setIcon({path: "icons/logo.png", tabId:tab.id});
// chrome.tabs.executeScript(tab.id, {file:"SCRIPT.user.js"});
chrome.tabs.executeScript(tab.id, {code:"alert('aaxxxbbaa')"});
}
else{
chrome.browserAction.setIcon({path: "icons/icon48.png", tabId:tab.id});
chrome.tabs.executeScript(tab.id, {code:"alert('bbdxdb')"});
}
});
var filter = {'url': [
{hostSuffix: '*', pathPrefix: ''},
{hostSuffix: '*', pathPrefix: ''}
]};
chrome.webNavigation.onDOMContentLoaded.addListener(function(tab){
if (toggle)
chrome.tabs.executeScript(tab.id,{code:"alert('loaded')"});
},filter);
我也试过在manifest
中设置它{
"name": "Tool",
"version": "0.0.1",
"manifest_version": 2,
"description": "Te",
"homepage_url": "",
"icons": {
"16": "icons/logo.png",
"48": "icons/logo.png",
"128": "icons/logo.png"
},
"default_locale": "en",
"background": {
"page": "src/bg/background.html",
"persistent": true
},
"browser_action": {
"default_icon": "icons/logo.png",
"default_title": "browser action demo"
},
"permissions": [
"<all_urls>"
],
"content_scripts": [
{
"run_at": "document_end",
"matches": [
"https://www.google.ca/*"
],
"css": [
"src/inject/inject.css"
]
},
{
"run_at": "document_end",
"matches": [
"https://www.google.ca/*"
],
"js": [
"src/inject/inject.js"
]
}
]
}
和my inject.js
chrome.extension.sendMessage({}, function(response) {
var readyStateCheckInterval = setInterval(function() {
if (document.readyState === "complete") {
clearInterval(readyStateCheckInterval);
// ----------------------------------------------------------
// This part of the script triggers when page is done loading
console.log("Hello. This message was sent from scripts/inject.js");
// ----------------------------------------------------------
}
}, 10);
});
window.addEventListener ("load", myMain, false);
function myMain (evt) {
console.log('aaann');
var jsInitChecktimer = setInterval (checkForJS_Finish, 111);
function checkForJS_Finish () {
if ( typeof SOME_GLOBAL_VAR != "undefined"
|| document.querySelector ("SOME_INDICATOR_NODE_css_SELECTOR")
) {
clearInterval (jsInitChecktimer);
// DO YOUR STUFF HERE.
console.log('hi');
}
}
}
在你的manifest文件中,你有重复的内容脚本,一个是CSS,一个是JS。它应该看起来像这样:
"content_scripts": [
{
"run_at": "document_end",
"matches": [
"https://www.google.ca/*"
],
"js": [
"src/inject/inject.js"
],
"css": [
"src/inject/inject.css"
]
}
]
另外,如果您希望它匹配其他url,则需要专门添加它们,或者使用
"matches": ["<all_urls>"]
至于你提议的背景脚本,那本质上是重新发明内容脚本的概念,它可能不符合你的最佳利益。我建议继续使用内容脚本路由
相关文章:
- Ember我如何知道路由模板何时完成加载并触发回调
- jQuery-如何检测页面何时完成加载
- 在 dom 完成加载 durandal 后调用函数
- .load() 事件在 SVG 完成加载后未被调用/无法访问其内容
- 等到无限滚动完成加载 - Javascript
- 如何检查DOM元素是否已完全加载
- 在完成加载angular js Scope元素、Directives和Http请求后是否发生任何事件
- 当子窗口打开并完成加载时得到通知
- 方法来查看jQuery文件是否已完全加载,然后执行与其相关的函数
- 如何强制JavaScript等待,直到动态添加的脚本文件完成加载
- 当页面上的所有视频都已完全加载时,执行javascript
- 音频HTML5检查所有音频元素是否已完全加载
- 如何在页面完成加载之前显示页面加载 html 文件
- 检查 URL 是否已完成加载
- 如何检查窗口是否仍在加载并已完成加载
- 用于 iframe 的 Javascript 事件已完成加载
- Chrome扩展:运行脚本后页面已完成加载javascript
- 在JavaScript中检测选项卡/下载是否已完成加载
- 代码注入到Gmail通过谷歌Chrome扩展-如何确保我的脚本注入时,它已完成加载
- 通过文档注入脚本后执行函数.写入已完成加载