javascript - 选项卡重新加载时如何运行此脚本(chrome 扩展)?

标签 javascript google-chrome-extension manifest reload onupdate

所以我想在选项卡重新加载到指定的 URL 时运行脚本。它几乎可以工作,但实际上 id 没有:) 这是我的 list 文件:

{
"manifest_version": 2,

"name": "Sample Extension",
"description": "Sample Chrome Extension",
"version": "1.0",

"content_scripts":
[
    {
      "matches": ["http://translate.google.hu/*"],
      "js": ["run.js"]
    }
],

"permissions":
[
    "activeTab",
    "tabs"
],

"browser_action":
{
    "default_title": "Sample",
    "default_icon": "icon.png"
}
}

这是 run.js:

chrome.tabs.onUpdated.addListener(
function ( tabId, changeInfo, tab )
{
    if ( changeInfo.status === "complete" )
    {
        chrome.tabs.executeScript( null, {file: "program.js"} );
    }
}
);

programs.js 只是提醒一些文本(还)。当我将警报放在 run.js 的第一行时,它会发出警报,但是当我将它放在 if 中时,它不会。我找不到问题所在。我输入错误了吗?

最佳答案

假设 http://translate.google.hu/* 页面是您希望在重新加载时注入(inject)代码的页面,您必须以稍微不同的方式进行处理。目前,您总是将代码注入(inject)这些页面(未经许可,同样如此),然后尝试在该内容脚本中使用 chrome.tabs api,这你做不到。相反,我们会将监听器放在后台页面中,并仅在页面刷新时注入(inject)代码,如您所愿。首先是 list :

{
  "manifest_version": 2,
  "name": "Sample Extension",
  "description": "Sample Chrome Extension",
  "version": "1.0",
  "background": {
    "scripts": ["background.js"]
  },
  "permissions":[
    "http://translate.google.hu/*", "tabs"
  ]
}

background.js

chrome.tabs.onUpdated.addListener(function(tabId,changeInfo,tab){
  if (tab.url.indexOf("http://translate.google.hu/") > -1 && 
      changeInfo.url === undefined){
    chrome.tabs.executeScript(tabId, {file: "program.js"} );
  }
});

这将监听 onUpdated 事件,检查它是否是我们要注入(inject)的 url 之一,然后检查页面是否是重新加载。最后一步是通过检查 changeInfo.url 是否存在来完成的。如果是这样,则意味着 url 已更改,因此不是刷新。反之,如果不存在,则该页面一定只是被刷新了。

关于javascript - 选项卡重新加载时如何运行此脚本(chrome 扩展)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16949810/

相关文章:

javascript - 如何将 unix 时间戳转换为 TypeScript 中的日期?

javascript - Reddit 提交 API 500 错误

javascript - PHP:如何根据数百个用户选项提供定制内容?

css - 字体在 chrome 扩展中不起作用

javascript - React/Redux 状态在第二次操作调用时为空

javascript - 当用户按下 "Enter"键时创建一个新行(HTML 和 Javascript)

javascript - 如何将 localstorage 从 popup.js 传递到 content.js

android - 有什么方法可以在 Manifest 中将 LargeHeap 用于 v3.x 而忽略 2.x?

delphi - 如何将 list <requestedPrivileges>信息添加到delphi项目中

scala - 更新到 Scala 2.10 时出现 list /类型标签问题