即时制作Chrome扩展程序,我在加载文件时遇到问题...
我想在popup.html
文件中选择一个选项时加载文件
例如,如果我选择option1
我想要eventPage1.js
,要加载,如果我选择option2
我希望eventPage2.js
加载,而不是两个同时加载<!DOCTYPE html>
<html>
<form>
Paises en el menu contextual:
<br>
<div>
<input type="radio" id="opcion1" name="opcion" value="opcion1" onclick= <script src="eventPage1.js"></script>
<label for="opcion1">Todos los paises</label>
<input type="radio" id="opcion2" name="opcion" value="opcion2" onclick= <script src="eventPage2.js"></script>
<label for="opcion2">Solo Mexico</label>
</div>
</form>
</body>
</html>
时间,只有一个。
这是我的popup.html文件
{
"manifest_version": 2,
"name": "help me",
"author": "me man",
"version": "1.1.4",
"description": "test test",
"browser_action":
{
"default_icon": "icon-large.png",
"default_popup": "popup.html"
},
"background": {
"scripts": ["menuSelection.js"]
},
"permissions": [
"storage",
"contextMenus"
],
"icons": {
"16": "icon-bitty.png",
"48": "icon-small.png",
"128": "icon-large.png"
}
}
每个eventpage文件,它的上下文菜单......
这是我的清单文件的样子
currNode->next = NULL;
答案 0 :(得分:0)
活动页面是在manifest.json的"background"
部分中使用"persistent": false
声明的页面的技术术语。它不仅仅是一个名字。它是一个特殊的上下文,仅存在于该单个隐藏页面。请务必阅读extension architecture overview。
出于安全原因(html中的onclick
属性),html文件中的内联代码默认不在扩展页中工作。在单独的js文件中处理所有事件
html中的input
标记未关闭,实际上格式不正确。没有开放<body>
。
要保存选项,请使用chrome.storage API或旧的原始字符串localStorage
要动态加载js文件,请将script
元素动态添加到head
,并将src
属性设置为要加载的文件的名称。或者使用现代require()方法。但是,您可能希望使用单个脚本文件开始学习。
请勿使用form
:浏览器不是网络服务器,因此无法提交网页。它只会重新加载,您将丢失所有数据。当然,您可以阻止侦听器中的submit
事件,但它无法使用form
。而是立即处理更改。
popup.html:
<!DOCTYPE html>
<html>
<body>
Paises en el menu contextual:
<div>
<label><input type="radio" name="opcion" value="opcion1">Todos los paises</label>
<label><input type="radio" name="opcion" value="opcion2">Solo Mexico</label>
</div>
<script src="popup.js"></script>
</body>
</html>
popup.js:
function setRadio(name, value) {
const el = document.querySelector(`input[name="${name}"][value="${value}"]`);
if (el && !el.checked) {
el.checked = true;
}
}
chrome.storage.sync.get('opcion', data => {
setRadio('opcion', data.opcion);
});
document.onchange = event => {
if (event.target.name == 'opcion') {
const value = event.target.value;
chrome.storage.sync.set({opcion: value});
switch (value) {
case 'opcion1':
doSomething1();
break;
case 'opcion2':
doSomething2();
break;
}
}
};
chrome.storage.onChanged.addListener((changes, area) => {
if (area == 'sync' && 'opcion' in changes) {
setRadio('opcion', changes.opcion.newValue);
}
});
答案 1 :(得分:-1)
我认为当您点击所选选项时,您可能会想要这样做:
<script type="text/javascript">
function LoadJavascriptFile(fileToLoad){
var script = document.createElement("script");
script.id = "customScript";
script.type = "text/javascript";
script.src = "fileToLoad";
document.getElementsByTagName("head")[0].appendChild(script);
}
</script>
在你选项上选择你打电话
LoadJavascriptFile("PathToMyFile.js")
然后,您要检查标题中是否存在脚本ID。如果是,则更新SRC,否则创建SRC