我有一个chrome扩展名。我无法调用外部脚本来处理后台脚本内部的以太坊 (web3.min.js.js。尝试调用脚本时出现此错误:
Uncaught EvalError: Refused to evaluate a string as JavaScript because 'unsafe-eval' is not an allowed source of script in the following Content Security Policy directive: "script-src 'self' blob: filesystem:".
到目前为止,我尝试过:
1. 将脚本下载到扩展文件夹,将其添加到 manifest.json:
"background":{"scripts":["web3.min.js", "background.js"]}
它包含它,但在包含的文件内给出相同的错误,因为它依次使用其他库。 2. 使用 XMLHttp 请求:
var xhr = new XMLHttpRequest();
xhr.open("GET", "https://cdn.jsdelivr.net/gh/ethereum/web3.js@1.0.0-beta.34/dist/web3.min.js", true);
xhr.onreadystatechange = function() {
if (xhr.readyState == 4) {
var resp = eval("(" + xhr.responseText + ")");
}
}
xhr.send();
将其附加到 dom
var script = document.createElement("script"); script.src = "./web3.min.js"; document.head.appendChild(script);
这些解决方案都不适合我。我知道这是出于安全原因,但没有任何解决方案吗?我只想在我的扩展中包含 web3。
我相信,如果您安装软件包并导入它附带的缩小版本,您应该能够在后台脚本中使用web3.js
。
npm i --save web3
import Web3 from 'web3/dist/web3.min.js';
...
const web3 = new Web3(Web3.givenProvider || provider);
const contract = new web3.eth.Contract(abi, contractAddress);
如果这仍然不起作用,我认为web.js
项目自述文件提供了有关故障排除的更多详细信息。