繁体   English   中英

Chrome扩展程序标签onUpdated事件

[英]Chrome extension tabs onUpdated event

我正在构建一个chrome扩展,每次打开一个新选项卡并加载页面时都会收到通知,为此我使用了chrome.tabs.onUpdated事件。

问题是,如果在某个域(有src)上托管的页面/选项卡上插入了iframe,则onUpdated事件会被触发。 有没有办法区分这些事件的“真实”标签加载与iframe加载触发的那些?

tabs.onUpdatedloading complete之间状态发生变化时触发。 据推测,插入iframe会将标签再次置于loading状态。

您可以查看是否在onUpdated侦听器中定义了details.url - 如果没有,您知道文档的URL没有更改。

也许您应该使用webNavigation API来代替您的目的。 在那里,您将获得可用于过滤子帧导航的TransitionQualifier

这个问题帮助我扩展,识别新页面和加载内容在同一页面上的区别,所以我想我会分享我的解决方案。 首先,您需要在background.js中调用onUpdated

表现

{
  "name": "My test extension",
  "version": "1",
  "manifest_version": 2,
  "background": {
    "scripts":["background.js"]
  },
  "content_scripts": [
    {
      "matches": ["http://*/*", "https://*/*"],
      "js": ["contentscript.js"]
    }
  ],
  "permissions": [
    "tabs"
  ]
}

background.js

chrome.tabs.onUpdated.addListener(
  function(tabId, changeInfo, tab) {
    // read changeInfo data
    if (changeInfo.url) {
      // url has changed; do something here

    }
  }
);

然后,您可以展开该脚本以将消息数据从background.js发送到您的内容脚本(使用chrome.runtime.sendMessage ):

background.js(续)

chrome.tabs.onUpdated.addListener(
  function(tabId, changeInfo, tab) {
    // read changeInfo data
    if (changeInfo.url) {
      // url has changed; do something here
      // like send message to content script
      chrome.tabs.sendMessage( tabId, {
        message: 'hello!',
        url: changeInfo.url
      })
    }
  }
);

最后,在扩展程序的内容脚本中监听该数据,但是:

contentscript.js

chrome.runtime.onMessage.addListener(
  function(request, sender, sendResponse) {
    // listen for messages sent from background.js
    if (request.message === 'hello!') {
      console.log(request.url) // new url is now in content scripts!
    }
});

您可以从background.js传递您想要的任何数据。 希望有人帮助! \\(•◡•)/

暂无
暂无

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

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