首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >tabs.executeScript -传递参数和使用库?

tabs.executeScript -传递参数和使用库?
EN

Stack Overflow用户
提问于 2011-02-12 15:48:29
回答 3查看 33.8K关注 0票数 33

我正在写一个Chrome扩展,它需要根据一些给定的参数修改特定域中的页面,这需要XSS才能获得,所以简单地使用内容脚本似乎是不可能的。因此,我决定使用tabs.executeScript注入脚本。

现在我需要知道两件事:首先,在使用executeScript时如何将参数传递给脚本?我想我可以使用消息,但是没有更直接的方法在注入脚本时传递参数吗?

其次,我的脚本使用jQuery,所以我需要以某种方式包含jQuery。这很傻,但我不知道该怎么做。到目前为止,我在正在编写的HTML页(例如background.html)中嵌入了jQuery。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2011-02-13 02:24:33

如果你不想使用消息传递,那么:

代码语言:javascript
运行
复制
chrome.tabs.executeScript(tabId, {file: "jquery.js"}, function(){
    chrome.tabs.executeScript(tabId, {code: "var scriptOptions = {param1:'value1',param2:'value2'};"}, function(){
        chrome.tabs.executeScript(tabId, {file: "script.js"}, function(){
            //all injected
        });
    });
});

(jquery.js应该放在扩展文件夹中)。脚本选项将在script.jsscriptOptions变量中可用。

使用消息传递也很简单:

代码语言:javascript
运行
复制
chrome.tabs.executeScript(tabId, {file: "jquery.js"}, function(){
    chrome.tabs.executeScript(tabId, {file: "script.js"}, function(){
        chrome.tabs.sendMessage(tabId, {scriptOptions: {param1:'value1',param2:'value2'}}, function(){
            //all injected
        });
    });
});

您需要向script.js添加一个请求监听器

代码语言:javascript
运行
复制
chrome.runtime.onMessage.addListener(function(message, sender, sendResponse) {
    var scriptOptions = message.scriptOptions;
    console.log('param1', scriptOptions.param1);
    console.log('param2', scriptOptions.param2);
    doSomething(scriptOptions.param1, scriptOptions.param2);
});
票数 58
EN

Stack Overflow用户

发布于 2017-12-13 06:31:18

基于上面的直接方法,我可以直接从我的Chrome扩展上的后台脚本将代码注入到一个新的标签中。但是,需要注意的是,executeScript命令的代码部分不会简单地接受变量,而只接受一个字符串。因此,在实验之后,我发现我们需要预先设置命令字符串,并包括我们想要的变量。如下所示:

代码语言:javascript
运行
复制
var sendCode = 'document.getElementsByClassName("form-control n-gram")[0].value = "' + TMObj.brand + '";';

var TMUrl = "http://website.com";
chrome.tabs.create({ url: TMUrl }, function(tab){
            chrome.tabs.executeScript(null, {code: sendCode});
      });
});

这样做效果很好!

票数 2
EN

Stack Overflow用户

发布于 2018-12-01 17:46:46

包含依赖项的更好方法

通过以下方式将依赖库(和其他.js文件)添加到manifest.json中的后台脚本:

代码语言:javascript
运行
复制
"background": {
  "scripts": [
    "jquery.js",
    "main.js"
]

在应用程序代码之前列出依赖项,以便在此之前加载它们。

Reference: Register Background Scripts

注意:这将执行脚本的急切加载,而不是像executeScript那样的延迟加载。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4976996

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档