Chrome 扩展程序:在注入脚本之前,将数据从弹出窗口传递到另一个脚本文件
Chrome Extensions: Pass data from popup to another script file before the script is injected
>问题
假设我访问一个名为 RENT.com 的网站。我们还假设对于这个 chrome 扩展,有一个脚本 A (JS) 注入到 RENT.com。脚本 A 是一个大型脚本文件,它与 RENT .com 的 HTML 元素(如表单字段)进行大量交互。但是,在脚本运行之前,它需要几个元素(例如电子邮件字段)的一些 DOM ID,因为它会修改它们。
目的
我想在弹出窗口中创建几个输入字段(我们称它们为输入电子邮件和输入名称.html以输入 RENT.com 上元素的 ID。显然,我会通过查看源代码来手动查找ID,这是故意的。
弹出窗口中的一个按钮.html我们称之为"GO BUTTON",然后将读取 InputEmail 和 InputName 的值并将其发送到脚本 A.脚本 A 现在拥有正常运行所需的一切,现在已注入到页面中。
脚本 A 和脚本 RENT.com 的相应交互现已完成。
我已经尝试了一些事情,从Docs和Stack中阅读了大量信息,但我不明白我认为从根本上说这是如何工作的。我想在执行content_script之前通过弹出窗口将数据传递给脚本 A.js最终只是注入脚本 A.似乎是鸡/蛋的问题,我不饿吃早餐或午餐;)。
谢谢大家!
弹出窗口.html
<!doctype html>
<html>
<head>
<title>Getting Started Extension's Popup</title>
</head>
<body>
<ul>
<li><label>Email ID</label><input type="text" id="emailID"></input></li>
<li><label>Company ID</label><input type="text" id="nameID"></input></li>
</ul>
<input type="button" id="Modify" style="" value="GO BUTTON"></input>
<script src="popup.js"></script>
</body>
</html>
弹出窗口.js
function click(e) {
//Ideally pass these values to Script A somehow
var email = document.getElementById("emailID").value;
var company = document.getElementById("nameID").value;
//then execute this or pass the ID's to content_script, inject into Script A, then inject into page
chrome.tabs.executeScript(null, {file:"contentscript.js"});
window.close();
}
document.addEventListener('DOMContentLoaded', function () {
var d = document.getElementById("Modify");
d.addEventListener('click',click);
});
要注入脚本 A 的内容脚本
var s2 = document.createElement('script');
s2.src =chrome.extension.getURL("ScriptA.js");
s2.async = false;
s2.onload = function() {
s2.parentNode.removeChild(s2);
};
(document.head||document.documentElement).appendChild(s2);
有几种方法可以实现此目的。一个是:
function click(e) {
var elementIDs = {
email: document.getElementById("emailID").value,
company: document.getElementById("nameID").value
};
chrome.tabs.executeScript({
code: 'window.elementIDs='+JSON.stringify(elementIDs)
}, function() {
chrome.tabs.executeScript({file: "ScriptA.js"});
});
window.close();
}
这样,ScriptA
将能够访问 window.elementIDs
中的值。这将起作用,因为来自同一页面上同一扩展的内容脚本将共享执行环境,并且对chrome.tabs.executeScript
调用的链接可确保定义全局变量的脚本在运行ScriptA
之前已运行。
- 如何准确执行加载脚本&退出弹出窗口
- Chrome扩展:加载窗口后执行脚本
- 是否可以从弹出窗口触发内容脚本中的行为
- 在后台运行的脚本在出现弹出窗口时会停止
- 谷歌应用脚本打开新窗口
- 如何在运行php脚本后保持弹出窗口打开
- 鼠标悬停在脚本上时使用居中图像弹出窗口
- 用于从剪贴板中的表自动填充活动浏览器窗口中的字段的脚本
- 如果在外部单击,则隐藏弹出窗口.为什么我的脚本没有'不起作用
- InDesign CS5脚本:如何在“n”秒后打开和关闭弹出窗口
- 如何在Chrome扩展弹出窗口和内容脚本之间发送消息
- 多个独特的弹出窗口,带有JPopUp脚本
- 运行谷歌脚本网络应用后关闭窗口
- 从 vb.net 关闭脚本弹出窗口
- Photoshop 脚本 - 更新窗口中的进度条
- Chrome“脚本只能关闭由它打开的窗口”错误
- 当窗口大小小于 x 时使脚本停止
- 查找负责打开新窗口的脚本
- 如何向脚本窗口添加滚动速度
- 这个网站在ie中使用脚本窗口错误