【问题标题】:Can I get the value of a variable from another script?我可以从另一个脚本中获取变量的值吗?
【发布时间】:2014-09-02 16:55:53
【问题描述】:

我可以使用内容脚本从另一个脚本中获取变量的值吗?例如来自 Facebook 上的脚本。对不起我的英语。

【问题讨论】:

  • 我不能肯定地说,但基于你需要在开发工具控制台中切换上下文或其他什么的事实,我会说你不能,它们可能是分开的环境。
  • 我认为您可以让内容脚本将<script> 元素注入页面。该页面将运行该脚本。该脚本可以读取该值,然后使用 DOM 事件将值传递给内容脚本。这些步骤与Can a site invoke a browser extension? 中的步骤类似,但您注入的脚本将自己运行函数,而不是声明要使用的页面的函数。

标签: javascript google-chrome-extension


【解决方案1】:

您的内容脚本可以将<script> 元素注入页面。注入的脚本应该读取值并使用 DOM 事件将值传递给内容脚本。

在您的内容脚本中:

// inject a script from the extension's files
// into the execution environment of the main page
var s = document.createElement('script');
s.src = chrome.extension.getURL("value _reader.js");
document.documentElement.appendChild(s);

document.addEventListener("valueFromPageEvent", function(event) {
    console.log("the content script just got the value " + event.detail.val);
});

value_reader.js(我们在上面的内容脚本中注入)内部,假设我们要从页面中读取变量 foobar

var dataObj = { "val": foobar };
var storeEvent = new CustomEvent('valueFromPageEvent', { "detail": dataObj });
document.dispatchEvent(storeEvent);

注意:value_reader.js 脚​​本必须在清单中您的扩展程序的 web_accessible_resources 列表中。

【讨论】:

  • 注意:如果相关页面具有限制性 CSP,此方法可能会失败。
  • @Xan 一个重要的注意事项和一个有趣的问题。也许您可以通过使用webRequest 更改.js 文件以包含您的事件发射代码来解决特定服务的问题?但是,您必须为要劫持的每个服务制定量身定制的解决方案,指定注入哪个 .js 文件以及何时触发事件。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-01-24
  • 2010-10-28
  • 2013-03-02
  • 1970-01-01
  • 2012-06-05
  • 1970-01-01
相关资源
最近更新 更多