在页面加载/刷新时在后台运行扩展程序 [英] Running an extension in background on page load/refresh

查看:165
本文介绍了在页面加载/刷新时在后台运行扩展程序的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我是新撰写扩展程序(和javascript)的。我希望扩展程序在打开/刷新某个URL时定时运行。代码如下。这是我迄今从网上找到的所有东西。

manifest.json



<$ p我不确定这是否会一次只运行一个标签$ p $ manifest_version:2,

name:Test Plugin,
description:这个扩展名是测试。,
版本:1.0,

content_scripts:[
{
matches:[https:// www。 google.com/*],
js:[main.js]
}
],
权限:[
activeTab
]
}

main.js

  chrome.tabs.onUpdated.addListener(function(tabId,changeInfo,tab){
if(changeInfo.status =='complete'&& amp ; tab.active){

setInterval(mainF,5000)

$ b})

function mainF(){$​​ b $ b var getTitle = document.getElementById('title');
var titleValue = getTitle.Value();

var fso = new ActiveXObject(Scripting.FileSystemObject);
var fh = fso.OpenTextFile(test.txt,8,false,0);
fh.WriteLine(titleValue);
fh.Close()
}


解决方案

将您的逻辑移至活动页面



内容脚本无法访问 chrome.tabs API。



并根据使用活动页面的最佳实践


使用事件过滤器将事件通知限制在您关心的事件中。例如,如果您收听 tabs.onUpdated 事件,请尝试使用 webNavigation.onCompleted 事件,但使用过滤器(标签API不支持过滤器)。这样,您的活动页面将只会加载您感兴趣的事件。


代码片段看起来像



manifest.json

  {
manifest_version:2,
name:Test Plugin,
description:这个扩展名是一个测试。,
version:1.0,
background:{
scripts:[main.js],
persistent:false
},
permissions:[
webNavigation
]

main.js



< pre $ chrome.webNavigation.onCompleted.addListener(函数(详情){
console.log(与hostSuffix google.com已加载的某些网址);
},{url:[{hostSuffix:'google.com'}]});


I'm new to writing extensions (and javascript). I'd like an extension to run on a timer whenever a certain URL is opened/refreshed. Code is below. This is all I have so far from what I've found online. I'm not sure if this will run for just one tab at a time.

manifest.json

    {
  "manifest_version": 2,

  "name": "Test Plugin",
  "description": "This extension is a test.",
  "version": "1.0",

    "content_scripts": [
    {
      "matches": ["https://www.google.com/*"],
      "js": ["main.js"]
    }
  ],
  "permissions": [
   "activeTab"
   ]
}

main.js

chrome.tabs.onUpdated.addListener( function (tabId, changeInfo, tab) {
  if (changeInfo.status == 'complete' && tab.active) {

    setInterval(mainF, 5000)

  }
})

    function mainF() {
        var getTitle = document.getElementById('title');
        var titleValue = getTitle.Value();

        var fso = new ActiveXObject("Scripting.FileSystemObject");
        var fh = fso.OpenTextFile("test.txt", 8, false, 0);
        fh.WriteLine(titleValue);
        fh.Close()
    }

解决方案

Move your logic to the Event Page.

Content Script doesn't have access to chrome.tabs API.

And according to best practices when using event pages,

Use event filters to restrict your event notifications to the cases you care about. For example, if you listen to the tabs.onUpdated event, try using the webNavigation.onCompleted event with filters instead (the tabs API does not support filters). That way, your event page will only be loaded for events that interest you.

Code snippets would look like

manifest.json

{
    "manifest_version": 2,
    "name": "Test Plugin",
    "description": "This extension is a test.",
    "version": "1.0",
    "background": {
        "scripts": ["main.js"],
        "persistent": false
    },
    "permissions": [
        "webNavigation"
    ]
}

main.js

chrome.webNavigation.onCompleted.addListener(function(details){
    console.log("Certain url with hostSuffix google.com has been loaded");
}, {url: [{hostSuffix: 'google.com'}]});

这篇关于在页面加载/刷新时在后台运行扩展程序的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆