2 vainquit vainquit 于 2018.05.12 01:00 提问

a.js中executeScript给某tab注入b.js,b.js计算完的值怎么传回a.js中?

好像很多朋友都没有理解我的意思。。。其实我问的是关于executeScript的两个问题。因为executeScript有一个code参数和一个file参数,code是在当前页的js文件直接运行一段代码;而file是注入一个新的js文件,也就是我标题的意思。
1、chrome.tabs.executeScript(tb[0].id,{code:"abc(3)"},null);
……function abc(num){alert(num)}
这属于直接用code来在当前js文件运行一段代码,按照我的期望,它应该运行成功后就弹出窗口上面写个3,。但实际上它没有任何反映。我就很奇怪,code不是执行一段代码吗?为什么我不能执行同在a.js下的一个函数?莫非abc(3)这不能算代码吗?

2、chrome.tabs.executeScript(tb[0].id,{file:"b.js"},null);
这是我在标题问的问题。我在a.js中运行了以上代码,在一个tb[0]的tab插入b.js。而在b.js中计算出了一个变量值(假设为v),那么我如何将v传到a.js呢?要知道这个file:"b.js"仅仅只是注入了一段代码,可它并没有办法传值到b.js上。运用全局变量固然是个办法,可不到万不得已的时候,我不太想用,不知道大家有没有其他的解决办法。

4个回答

showbo
showbo   Ds   Rxr 2018.05.12 11:40
已采纳

用chrome.tabs.sendMessage和background js交互,具体参考这个:https://blog.csdn.net/summerxiachen/article/details/78698878

qq_41189681
qq_41189681   2018.05.12 08:53

你可以在一个页面引这两个JS,然后a.js获取到的数据放在一个公共变量里面b.js就可以获取到或者直接吧这个值当做参数传递个b.js的方法。

vainquit
vainquit 这问题就是如何把值当做参数传给b.js的方法。。。因为excuteScript的file:"b.js"并没有传值的功能的,仅仅只是注入b.js吧?
15 天之前 回复
weixin_36485263
weixin_36485263   2018.05.12 06:48

比方说如果你想看到在网站http://www.example.com里面的一个警告框,那么首先在地址栏输入URL(www.example.com),当页面加载完之后,清空URL并输入javascrit:alert("Hello World")作为一个新的URL.这样将弹出一个警告框显示Hello World.可是,一些人会用这个技巧改变页面内的几乎任何内容

a718089112
a718089112   2018.05.12 08:25

使用方式:{code:abc(3)}
b.js 加个return 啊 把结果直接return返回 那样 abc(3) 直接就是结果了

vainquit
vainquit 可是注入b.js的代码不是file:"b.js"嘛。。这样就无法引用函数了
15 天之前 回复
Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!