Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/410.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/google-chrome/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何从chrome扩展触发特定网站上的功能?_Javascript_Google Chrome_Google Chrome Extension_Google Chrome Devtools - Fatal编程技术网

Javascript 如何从chrome扩展触发特定网站上的功能?

Javascript 如何从chrome扩展触发特定网站上的功能?,javascript,google-chrome,google-chrome-extension,google-chrome-devtools,Javascript,Google Chrome,Google Chrome Extension,Google Chrome Devtools,最近开始使用Chrome扩展。 我正在试图弄清楚如何才能在特定网站上执行功能 例如,我只想显示堆栈溢出的警报框。我使用Chrome的声明性内容API来匹配主机 对于这个问题,我还没有找到类似的问题 我的manifest.json文件正在后台运行以下代码块 'use strict'; chrome.runtime.onInstalled.addListener(function() { chrome.declarativeContent.onPageChanged.removeRules(und

最近开始使用Chrome扩展。 我正在试图弄清楚如何才能在特定网站上执行功能

例如,我只想显示堆栈溢出的警报框。我使用Chrome的声明性内容API来匹配主机

对于这个问题,我还没有找到类似的问题

我的manifest.json文件正在后台运行以下代码块

'use strict';

chrome.runtime.onInstalled.addListener(function() {
chrome.declarativeContent.onPageChanged.removeRules(undefined, function() {
    chrome.declarativeContent.onPageChanged.addRules([{
        conditions: [
            new chrome.declarativeContent.PageStateMatcher({
                pageUrl: {
                    hostEquals: 'stackoverflow.com'
                }
            })
        ],
        actions: [new chrome.declarativeContent.SOOnlyFunction()]
    }]);
});
});

function SOOnlyFunction()
{
    alert('On SO');
}

您可以使用Chrome API实现此行为:

  • 加载新页面时,您可以调用

    chrome.tabs.on更新

    您可以在这里筛选url

  • 和创建通知

    chrome.notifications.create

  • 在清单中添加以下对象:

    "permissions": [  "activeTab","tabs","notifications" ],
    "background": {
        "scripts": ["background.js"],
        "persistent": false
    }
    
    下面是我的background.js的样子

    chrome.tabs.onUpdated.addListener(function(tabId, changeInfo, tab){
      if(changeInfo.url != null){
    
         console.log("onUpdated." + " url is "+changeInfo.url);
         // creates Notification.
        showNotification();
    
      }
    
    });
    
    function showNotification() {
    
        chrome.notifications.create( {
          iconUrl: chrome.runtime.getURL('img/logo128.png'),
          title: 'Removal required',
          type: 'basic',
          message: 'URL is',
          buttons: [{ title: 'Learn More' }],
          isClickable: true,
          priority: 2,
        }, function() {});
    
    }
    
    它是不完整的,但你会明白的。

    除了内置的动作之外,你不能用它做任何事情

    它目前是专门的
    ShowPageAction
    SetIcon
    RequestContentScript
    (仍处于实验阶段)

    无法轻松扩展的原因是,
    declarativeContent
    是在本机代码中实现的,作为JavaScript事件处理程序的更有效的替代方案

    总的来说,Chrome开发者将其视为一个雄心勃勃但基本上不可行的/未开发的/废弃的想法,命运与之类似


    有关使用上述JS处理程序的实现思想,请参阅

    或者,您仍然可以通过使用仅在预定义域上激活的内容脚本(只要您事先知道该域是一个常量),将其设置为“声明性”。然后他们可以自己做一些事情或者做一些事情


    最后,如果您的目标是重定向/阻止请求,那么您需要查看的就是它。

    Oh boy!突然间,最后一句话并没有让我感觉很好。你建议我选择Chrome标签吗?不过,我听说它会让我的公羊窒息。但同样,过早优化是万恶之源。对于您所描述的,最好的办法是在清单中声明一个内容脚本,并从中触发您的逻辑(如果您需要后台页面执行某些操作,则可能使用消息传递)。与尝试收听
    标签相比,它产生的噪音要小得多。更新的
    需要更少的权限(阅读URL需要可怕的
    “标签”
    ),太棒了。我会继续的。