gpt4 book ai didi

javascript - 内容脚本仅在重新加载/刷新时加载

转载 作者:行者123 更新时间:2023-11-28 14:36:45 27 4
gpt4 key购买 nike

这是我第一次创建 Google Chrome 扩展程序,我无法找到一种方法来可靠地让内容脚本在点击 YouTube 上的建议视频或任何相关视频时运行一次。我尝试将“all_frames”设置为 true,但这会多次调用脚本。浏览 YouTube 视频时,是否有一种简单的方法可以让每个视频仅运行一次内容脚本?

PS:我使用 YouTube 作为主要示例,但其他网站上也存在此问题。是什么原因造成的以及如何解决它?

{//manifest.json
"name": "Test",
"version": "0.0.1",
"content_scripts": [{
"matches": ["<all_urls>"],
"js": ["run.js"],
}],
"permissions": ["activeTab"],
"manifest_version": 3
}

-

//run.js
console.log('running');

最佳答案

问题是 YouTube 会动态更新页面,因此内容脚本在页面内容更改后并不总是运行。您需要检测页面 url 是否已更改。

有两种方法可以检测内容更改。

解决方案

  1. 使用chrome.webNavigation.onHistoryStateUpdated事件来检测内容已更改。

您需要在 manifest.json 中设置 webNavigation 的权限:

"permissions": [
*"tabs", "webNavigation"*
]

背景.js

    chrome.webNavigation.onHistoryStateUpdated.addListener(function(details) {
//Send message to content Script -> Page was changed
//or execute parser from here
// chrome.tabs.executeScript
});

content.js//解析你的内容

  • Use Mutation Observers:在您的内容脚本中。
  • MutationObserver 接口(interface)提供了监视对 DOM 树所做的更改的能力。

    // Select the node that will be observed for mutations
    var targetNode = document.getElementById('some-id');

    // Options for the observer (which mutations to observe)
    var config = { attributes: true, childList: true, subtree: true };

    // Callback function to execute when mutations are observed
    var callback = function(mutationsList) {
    for(var mutation of mutationsList) {
    if (mutation.type == 'childList') {
    // do something with content
    }
    else if (mutation.type == 'subtree') {
    // do something with content
    }
    }
    };

    // Create an observer instance linked to the callback function
    var observer = new MutationObserver(callback);

    // Start observing the target node for configured mutations
    observer.observe(targetNode, config);

    // Later, you can stop observing
    observer.disconnect();

    关于javascript - 内容脚本仅在重新加载/刷新时加载,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49665031/

    27 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com