我正在开发一个主要在弹出窗口内工作的Chrome扩展程序。 我希望用户在弹出窗口的输入字段中输入一些文本(字符串),这个字符串将作为我希望在特定页面上注入和运行的脚本中的“变量”。
我尝试通过制作一个将执行脚本的内容脚本来实现这一点,使用以下记录良好的方式:
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中的代码。
最好的方法是什么?我不会将任何信息反馈给扩展程序。
感谢。
答案 0 :(得分:2)
要将弹出窗口中的变量传递给动态插入的内容脚本,请参阅Pass a parameter to a content script injected using chrome.tabs.executeScript()。
在内容脚本中获取变量后,有很多方法可以将变量放到页面中的脚本中。
E.g。通过在脚本代码上设置属性,并使用document.currentScript
访问此<script>
代码。注意: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.
})();