请问Chrome插件如何监听#的请求或iframe打开

请问浏览器插件chrome.webRequest.onCompleted.addListener 能监听带#号的请求吗,我在background.js中用urls: ["://xxx.xxxx.com/xxxxxx/#/userStatus/"],但是请求带了#,导致写到#后面的请求监听不成功,我这么做是想监听iframe被打开时操作,或者是有没有类似的可以监听iframe打开的方法,比如点击按钮打开了iframe标签(iframe是可以关闭的),每次打开都重新执行,类似于监听标签打开的操作:chrome.tabs.onUpdated.addListener

chrome.webRequest.onCompleted.addListener(
  function (details) {
   ******
  },

  { urls: ["*://xxx.xxxx.com/xxxxxx/#/userStatus/*"] }  
);

可以
监听请求:

chrome.webRequest.onBeforeRequest.addListener(
  function(details) {
    // 在这里处理请求
    console.log('请求 URL:', details.url);
  },
  {urls: ["<all_urls>"]}
);

监听iframe打开:

chrome.webNavigation.onCreatedNavigationTarget.addListener(
  function(details) {
    // 在这里处理iframe打开事件
    console.log('打开的URL:', details.url);
  },
  {url: [{schemes: ['http', 'https']}]},
);

另:需要 manifest.json 中声明相应的权限

{
  "manifest_version": 2,
  "name": "My Extension",
  "version": "1.0",
  "permissions": [
    "webRequest",
    "webRequestBlocking",
    "<all_urls>"
  ],
  "background": {
    "scripts": ["background.js"],
    "persistent": false
  },
  "manifest_version": 2
}

  • 以下回答由chatgpt基于相关博客总结生成:

    问题解决思路:

    1. 监听带有#号的请求:
    2. 可以使用chrome.webRequest.onCompleted.addListener方法来监听请求,并通过urls属性指定要监听的URL。
    3. 由于#后面的内容导致监听失败,可以通过在监听函数内部进行判断和处理。
    4. 通过chrome.tabs.query方法获取当前活动的tab,然后通过tab.url获取当前页面的URL。
    5. 判断URL是否包含#号,如果包含则进行相应的操作。

    6. 监听iframe的打开事件:

    7. 可以使用chrome.tabs.onUpdated.addListener方法来监听标签页的更新事件。
    8. 当标签页的状态为complete时,表示标签页已加载完成,可以进行相应的操作。
    9. 在监听函数内部通过chrome.tabs.executeScript方法向标签页注入内容脚本,实现相应的操作。

    具体解决方案如下:

    1. 监听带有#号的请求:
    chrome.webRequest.onCompleted.addListener(
      function(details) {
        // 获取当前活动的tab
        chrome.tabs.query({ active: true, currentWindow: true }, function(tabs) {
          // 获取当前页面的URL
          var url = tabs[0].url;
          // 判断URL是否包含#号
          if (url.includes("#")) {
            // 进行相应的操作
            // ...
          }
        });
      },
      { urls: ["<all_urls>"] }
    );
    
    1. 监听iframe的打开事件:
    chrome.tabs.onUpdated.addListener(function(tabId, changeInfo, tab) {
      // 判断标签页的状态是否为complete
      if (changeInfo.status === "complete") {
        // 向标签页注入内容脚本
        chrome.tabs.executeScript(tabId, { file: "content.js" });
      }
    });
    

    其中,content.js为内容脚本的文件名,可以根据实际需求进行修改。在content.js中可以进行相应的操作。

    请注意,以上解决方案仅供参考,具体的实现方式可能因插件的具体需求而有所不同。