chrome插件问题,如何在chrome.tabs.executeScript引用的脚本文件内调用background.js内的变量

huahuaxuwei 2021-04-04 05:45:01
以下是插件的background.js的相关内容,但是AutoFill.js内的代码不能访问background.js中的变量var_t,如何才能使调用的脚步文件可以访问var_t变量呢?

background.js:

var var_t = "Var变量";
chrome.contextMenus.create({
title: "右键菜单",
id: "1",
onclick: function () {
chrome.tabs.executeScript(null, { file: "js/AutoFill.js" });
}
});


AutoFill.js:

alert(var_t);

这里仅仅为了演示用,只写了alert(var_t);运行时,chrome报错,var_t未定义。
...全文
1156 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
huahuaxuwei 2021-04-06
  • 打赏
  • 举报
回复
谢谢
引用 10 楼 泡泡鱼_ 的回复:
[quote=引用 9 楼 huahuaxuwei 的回复:]说啥了?被删了什么?
嗯,被删了。 你可以试一下window.var_t='1'。然后看你的AutoFill.js中是否可以使用 但建议,你使用它原本就支持的方式。你百度一下,关键词:chrome.tabs.executeScript 第一个结果你看看是不是能用。 类似于这种问题,你应该先去百度或google。实在找不到解决方法再来问,省时间多了[/quote] 我上午问的问题解决了。把发送和监听事件调下个就好了,在background.js里监听,在AutoFill.js注入的脚本里发送消息就好了。至于为什么会每次都累计弹出,我就不去想了,有机会再去研究一下。起码现在的问题解决了。谢谢你!
huahuaxuwei 2021-04-06
  • 打赏
  • 举报
回复
谢谢你,我这个问题解决了。我百度了一下,仔细看了一下,又参考了这个帖子https://blog.csdn.net/zhongping136/article/details/16869819。 现在我知道怎么通过消息机制来传递参数了。 我把background.js里面的代码改了一下: background.js主要内容:

var var_t = "Var变量";
chrome.contextMenus.create({
    //type :"radio",//单选框
    parentId: "1",
    title: "子菜单1",

    onclick: function () {
        getCurrentTabId((tabId) => {
            chrome.tabs.executeScript(tabId, {
                file: "js/AutoFill.js"
            }, function () {
                chrome.tabs.sendMessage(tabId, var_t, function (response) {
                    var_t = response
                    //alert(response);
                    alert("变量:" + var_t);
                });
            });
        });
    },
});

AutoFill.js:

chrome.runtime.onMessage.addListener(function(message, sender, sendResponse) {
    alert(message);
    sendResponse("调用后返回的变量");
});
这样,右键点击后,会触发alert(message);弹出"Var变量",然后接着再弹出"调用后返回的变量"(执行alert("变量:" + var_t);) 但是又来问题了,为什么我不更新插件,每点击一次右键菜单,它都累计弹出窗口呢?就是我加载插件后,第一次右键点击菜单,弹出一次对话框,再点击一次,就弹出2次,就好像说上一次的消息,还在消息队列中一样。
huahuaxuwei 2021-04-05
  • 打赏
  • 举报
回复
谢谢,我那么定义不就是全局变量了么!
huahuaxuwei 2021-04-05
  • 打赏
  • 举报
回复
我百度很久了,没找到相关内容,可能是我输入的关键词不对。关于chrome.tabs.executeScript,我觉得它就是属于动态注入吧!我在看一篇文章,这里提到了一些,不知道会不会有帮助,明天上班的时候我再去实践一下。
泡泡鱼_ 2021-04-05
  • 打赏
  • 举报
回复
引用 2 楼 huahuaxuwei 的回复:
谢谢,我那么定义不就是全局变量了么!
问题是就你给的这些代码,根本无法分辨。但是你说的结果,就已经很明显它就不是全局变量呀
泡泡鱼_ 2021-04-05
  • 打赏
  • 举报
回复
引用 9 楼 huahuaxuwei 的回复:
说啥了?被删了什么?
嗯,被删了。 你可以试一下window.var_t='1'。然后看你的AutoFill.js中是否可以使用 但建议,你使用它原本就支持的方式。你百度一下,关键词:chrome.tabs.executeScript 第一个结果你看看是不是能用。 类似于这种问题,你应该先去百度或google。实在找不到解决方法再来问,省时间多了
huahuaxuwei 2021-04-05
  • 打赏
  • 举报
回复
说啥了?被删了什么?
泡泡鱼_ 2021-04-05
  • 打赏
  • 举报
回复
你在chrome插件问题,如何在chrome.tabs.executeScript引用的脚本文件内调用background.js内的变量的回帖已被管理员删除,原因是:审核不通过 哪个管理员删的?我请问一下,什么原因导致的审核不通过?
huahuaxuwei 2021-04-05
  • 打赏
  • 举报
回复
引用 3 楼 泡泡鱼_的回复:
[quote=引用 2 楼 huahuaxuwei 的回复:]谢谢,我那么定义不就是全局变量了么!
问题是就你给的这些代码,根本无法分辨。但是你说的结果,就已经很明显它就不是全局变量呀 [/quote] 我觉得我这是跨域引用的问题吧!
huahuaxuwei 2021-04-05
  • 打赏
  • 举报
回复
只要不是在function里面不都是全局变量么
huahuaxuwei 2021-04-05
  • 打赏
  • 举报
回复
定义全局变量不就是var t就可以么!
泡泡鱼_ 2021-04-04
  • 打赏
  • 举报
回复
AutoFill.js要访问var_t,你得保证var_t是全局变量

87,910

社区成员

发帖
与我相关
我的任务
社区描述
Web 开发 JavaScript
社区管理员
  • JavaScript
  • 无·法
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧