我目前正在迈出扩展开发的第一步。目前我只是想在按下按钮时出现的弹出窗口中显示一些信息。问题是它是动态信息,我从互联网上的JSON文件中收集。然而,我无法将数据显示在弹出窗口中,并且我已经将问题缩小到了它似乎根本不运行任何Javascript的程度......
我有一个非常简单的代码:
的manifest.json:
{
"manifest_version": 2,
"name": "Test Extention",
"version": "1.0",
"description": "",
"icons": {
"256": "icon/button.png"
},
"permissions": [
"activeTab",
"storage"
],
"browser_action": {
"default_icon": {
"200": "icon/button.png"
},
"default_title": "Test Extention",
"default_popup": "popup/popup.html"
}
}
弹出/ popup.html:
<html>
<head>
<meta charset="utf-8">
<style>
html,body{width:300px}
</style>
</head>
<body>
<div id="container"></div>
<script>
document.getElementById('container').innerHTML = 'testing';
</script>
</body>
</html>
当我直接在firefox中运行html文件时,它会按预期显示“testing”。但是,当我运行扩展程序时,单击新按钮时会出现空白弹出窗口。
我还尝试将js-code放在一个函数中,并用一个按钮调用它,看看是否需要一些时间才能运行js-code,但这也不起作用。
我确信这是一件非常简单的事情,我很想念,但我找不到任何关于此的事情......
答案 0 :(得分:3)
WebExtension API默认会应用this thread。因此,它无法在弹出HTML文件中执行内联javascript代码。
不仅:
<script>
document.getElementById('container').innerHTML = 'testing';
</script>
但是:
<button onclick="alert('hello')">Hello</button>
如果您触及此规则,则可以在Content Security Policy和Browser Toolbox中收到一些错误消息。
因此,要解决此问题,请使用<script src="..."></script>
而不是<script>...</script>
。
或者,也许在manifest.json中设置Add-on Debugger到Unsafe inline script键也可以解决这个问题。但是MDN告诉我:
content_security_policy中的注意:有效示例显示CSP中密钥的正确使用。但是,对于addons.mozilla.org上列出的扩展程序,不允许在其CSP中使用“不安全 - 评估”,“不安全内联”,“远程脚本”,“blob”或“远程源”的扩展程序重大安全问题。
。这似乎不太好。