繁体   English   中英

Chrome扩展程序-如何在每次加载页面时运行主脚本

[英]Chrome extension- How to have your main script run every time a page loads

因此,我的主要内容脚本在刷新页面时运行,但是当我单击网页的新页面时,它不会再次运行; 刷新页面时只有一次。 我希望每次页面更改或URL更改时都重新运行。 主要内容脚本中的主要功能称为“ runExtension()”

这是我的background.js

 chrome.tabs.onUpdated.addListener( function (tabId, changeInfo, tab) { if (changeInfo.status == 'complete') { alert("LOADED"); setTimeout(runExtension, 1000); } }) 

这是我的manifest.json

 { "manifest_version": 2, "name": "RateMyBull", "description": "View professor ratings from RateMyProfessor when signing up for classes on the USF schedule planner", "version": "1.0", "permissions": ["https://usf.collegescheduler.com/*"], "background": { "scripts": ["background.js"] }, "content_scripts": [ { "matches": ["https://usf.collegescheduler.com/*"], "js": ["RateMyBull.js", "jquery-3.3.1.min.js", "jquery-3.3.1.js"], "run_at": "document_idle", } ] } 
这是主要脚本

 setTimeout(runExtension, 1000); function runExtension(){ var tableElementNode = document.querySelectorAll(".section-detail-grid.table-bordered-wrap>tbody>tr>td>div"); console.log(tableElementNode); for (var i = 0; i < tableElementNode.length; i++) { if(tableElementNode[i].children.length < 1 && tableElementNode[i].innerText != "Not Assigned") { tableElementNode[i].className = "professor"; } } var professorsArray = []; var professorElementNode = document.querySelectorAll(".professor"); for (var i = 0; i < professorElementNode.length; i++) { professorElementNode[i].id = i; var professorName = professorElementNode[i].innerText; professorName = professorName.trim(); professorName = professorName.replace(/,/g, ""); professorName = professorName.split([' ']); var firstName = professorName[1]; var lastName = professorName[0]; var professorObj = { first: firstName, last: lastName, ID: i }; professorsArray[i] = professorObj; console.log(professorsArray[i].first); } alert("this just ran"); } chrome.runtime.onMessage.addListener(function(msg, sender, sendResponse) { if (msg === 'url-update') { alert("TEST"); } }); 

诸如RateMyBull.js类的Content scripts在与后台页面(在某个网页上, 但与该网页有些隔离 )的完全独立的环境中运行。

如果您希望背景页面导致内容脚本中的代码运行,请使用消息传递

就您而言,尝试将background.js更改为:

chrome.tabs.onUpdated.addListener( function (tabId, changeInfo, tab) {
  if (changeInfo.status == 'complete') {

    chrome.tabs.sendMessage(tab.id, {type: "runExtension"});

  }
})

并将侦听器添加到您的RateMyBull.js内容脚本中:

chrome.runtime.onMessage.addListener(
  function(request, sender, sendResponse) {
    if (request.type === "runExtension")
      runExtension();
  });

当然,网页可以通过多种方式“更改”。 请参阅注释中引用的问题和相关答案,以获取有关检测各种类型更改的更多信息。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM