gpt4 book ai didi

javascript - 在注入(inject)内容脚本之前传递变量

转载 作者:行者123 更新时间:2023-12-02 16:25:54 31 4
gpt4 key购买 nike

我正在开发一个主要在弹出窗口中工作的 Chrome 扩展。我希望用户在弹出窗口的输入字段中输入一些文本(字符串),并且该字符串将充当我想要注入(inject)并在特定页面上运行的脚本中的“变量”。

我尝试通过制作一个将执行脚本的内容脚本来实现此目的,使用以下有据可查的方式:

var s = document.createElement('script');


s.src = chrome.runtime.getURL('pageSearch.js');
s.onload = function() {
this.parentNode.removeChild(this);
};

(document.head||document.documentElement).appendChild(s);

基本上,我想在页面上执行脚本之前将用户的输入一直传递到 pageScript.js 中的代码。

解决这个问题的最佳方法是什么?我不会向扩展程序返回任何信息。

谢谢。

最佳答案

要将变量从弹出窗口传递到动态插入的内容脚本,请参阅 Pass a parameter to a content script injected using chrome.tabs.executeScript() .

在内容脚本中获取变量后,有很多方法可以将该变量获取到页面中的脚本中。

例如通过在脚本标签上设置属性并访问此 <script>使用 document.currentScript 标记。注:document.currentScript仅指在文档中插入标签后立即使用的脚本标签。如果您想稍后引用原始脚本标记(例如在计时器或事件处理程序中),则必须将对脚本标记的引用保存在局部变量中。

内容脚本:

var s = document.createElement('script');
s.dataset.variable = 'some string variable';
s.dataset.not_a_string = JSON.stringify({some: 'object'});
s.src = chrome.runtime.getURL('pageSearch.js');
s.onload = function() {
this.remove();
};
(document.head||document.documentElement).appendChild(s);

pageSearch.js:

(function() {
var variable = document.currentScript.dataset.variable;
var not_a_string = JSON.parse(document.currentScript.dataset.not_a_string);
// TODO: Use variable or not_a_string.
})();

关于javascript - 在注入(inject)内容脚本之前传递变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28704156/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com