簡體   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