首页 > 解决方案 > 页面加载后向内容脚本发送消息

问题描述

我正在尝试遍历 URL 的数组 inside background.js。对于每个 URL,我希望它导航当前选项卡,然后发送一条消息content_script.js告诉它执行操作。

问题是它立即发送它而不是在页面加载时发送(实际上它甚至在更新 URL 之前发送它)

背景.js:

  chrome.tabs.update(null, {
    url: 'https://www.example.com/' + path
  }, function(tab) {
    chrome.tabs.sendMessage(tab.id, {message: 'update_user'});
  });

content_script.js

chrome.runtime.onMessage.addListener(
  function(request, sender, sendResponse) {
    if (request.message === 'update_user') {
      console.log('loaded');
    }
  }
);

标签: javascriptgoogle-chromegoogle-chrome-extensiongoogle-chrome-app

解决方案


如果异步页面加载是您的问题,这样的事情可能会有所帮助:

chrome.tabs.update(null, {
        url: url
    }, function (tab) {
        chrome.tabs.onUpdated.addListener(function listener (tabId, info) {
            if (info.status === 'complete' && tabId === tab.id) {
                chrome.tabs.onUpdated.removeListener(listener);
                chrome.tabs.sendMessage(tab.id, {message: 'update_user'});
            }
        });
    });
});

onUpdated这会为每个错误的 URL添加一个单独的侦听器。每个侦听器仅适用于显式打开的单个选项卡,因此不会发生“意外”。

加载选项卡后,侦听器将被删除并发送消息。


推荐阅读