为了账号安全,请及时绑定邮箱和手机立即绑定

从Background.js在页面级执行代码并返回值

从Background.js在页面级执行代码并返回值

开心每一天1111 2019-12-06 10:01:50
我有一个网页,其中包含自己的脚本和变量,我需要执行这些脚本和变量并从扩展程序的Background.js中检索返回值。我了解(我认为!),为了与网页进行交互,必须通过chrome.tabs.executeScript或ContentScript完成此操作,但是因为代码必须在原始页面的上下文中执行(为了具有范围) (脚本和变量),则需要先将其注入页面。继Rob W撰写的精彩文章之后,我能够调用页面级脚本/变量,但是我正在努力了解如何以这种方式返回值。到目前为止,这就是我所得到的...网页代码(我想与之交互):<html><head><script>    var favColor = "Blue";    function getURL() {      return window.location.href;    }</script></head><body>    <p>Example web page with script content I want interact with...</p></body></html>manifest.json:{  // Extension ID: behakphdmjpjhhbilolgcfgpnpcoamaa  "name": "MyExtension",  "version": "1.0",  "manifest_version": 2,  "description": "My Desc Here",  "background": {    "scripts": ["background.js"]  },    "icons": {    "128": "icon-128px.png"  },  "permissions": [    "background",    "tabs",    "http://*/",    "https://*/",    "file://*/",           //### (DEBUG ONLY)    "nativeMessaging"  ]}background.jscodeToExec = ['var actualCode = "alert(favColor)";',                  'var script = document.createElement("script");',                  ' script.textContent = actualCode;',                  '(document.head||document.documentElement).appendChild(script);',                  'script.parentNode.removeChild(script);'].join('\n');chrome.tabs.executeScript( tab.id, {code:codeToExec}, function(result) {   console.log('Result = ' + result);} );我意识到代码当前只是在“更改” favColor变量(这只是一项测试,以确保我可以看到它正常工作)。但是,如果我尝试返回该变量(通过将其保留为最后一条语句或说“ return favColor”),则executeScript回调将永远没有该值。因此,这里似乎有(至少)三个级别:background.js内容脚本实际网页(包含脚本/变量)...我想知道从1级到3级(以上)并返回值的推荐方式是什么?在此先感谢:o)
查看完整描述

3 回答

?
跃然一笑

TA贡献1826条经验 获得超6个赞

我主要推荐Xan的方法,因为使用异步事件进行编码的一个优点是,如果需要,可以更轻松地将代码重构为使用异步API。如果您确定总是要同步访问数据,那么从我的答案中使用同步方法就可以了。实际上,实现它变得越来越容易,因此出错率也更低。

查看完整回答
反对 回复 2019-12-06
  • 3 回答
  • 0 关注
  • 343 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信