gpt4 book ai didi

JavaScript 不在本地页面上运行

转载 作者:行者123 更新时间:2023-11-28 04:27:10 24 4
gpt4 key购买 nike

我有一个非常简单的网络扩展,单击按钮时应该在新窗口中打开本地页面:

function openMyPage() {
var popupURL = chrome.extension.getURL("my-page.html");

chrome.windows.create({
url: popupURL,
type: "popup",
height: 200,
width: 200
});
}

chrome.browserAction.onClicked.addListener(openMyPage);

在 my-page.html 中,我想运行一些 javascript,但无法让它工作。即使是简单的脚本也不会执行:

<html>
<body>
<script type="text/javascript">
document.write("JS executed")
</script>
</body>
</html>

打开页面的 URL 类似于 moz-extension://8974747a-3aa7-4654-93e5-ad60d3de0cc5/my-page.html。我尝试过禁用 NoScript 等插件,但没有成功。

如何在该页面执行JS?我究竟做错了什么?感谢您的帮助。

根据请求编辑:manifest.json:

{

"description": "Adds browser action icon to toolbar to open packaged web page. See https://developer.mozilla.org/en-US/Add-ons/WebExtensions/Examples#open-my-page-button",
"manifest_version": 2,
"name": "open-my-page",
"version": "1.0",
"homepage_url": "https://github.com/mdn/webextensions-examples/tree/master/open-my-page-button",
"icons": {
"48": "icons/page-48.png"
},

"applications": {
"gecko": {
"id": "open-my-page-button@mozilla.org",
"strict_min_version": "45.0"
}
},

"background": {
"scripts": ["background.js"]
},

"browser_action": {
"default_icon": "icons/page-32.png"
}

}

它直接取自 Mozilla 的一个示例。

最佳答案

内联脚本不适用于默认内容安全策略

您可能会遇到Default Content Security Policy这是:

"script-src 'self'; object-src 'self';"

这意味着Inline JavaScript won't run 。换句话说,您的 HTML 中不允许出现以下内容:

<script type="text/javascript"> document.write("JS executed")</script>

<script>console.log("foo");</script>

<div onclick="console.log('click')">Click me!</div>

正常解决方案:
正常的解决方案是将所有 JavaScript 移动到一个或多个单独的文件中,并将它们包含在以下内容中:

<script type="text/javascript" src="my-page.js"></script>

使用内联脚本:
如果您希望使用内联脚本,可以使用 content_security_policy输入您的manifest.json文件。但是,您需要提供“hash of the script in the "script-src" directive.

除非由于某种原因,您确实需要使用内联脚本,否则您可能会发现将所有脚本内容移动到外部文件要容易,而不是而不是包含与 HTML 内联的脚本(这需要您重新计算对脚本进行的任何更改的哈希值)。

在 Firefox 48 中实现:
此内容安全策略是 implemented in Firefox 48 。关于 Firefox 48 的博客文章肯定提到:

Please note: this will be a backwards incompatible change for any Firefox WebExtensions that did not adhere to this CSP. Existing WebExtensions that do not adhere to the CSP will need to be updated.

您的具体案例:

如果将脚本更改为(创建哈希时空格计数),它将起作用:

<script type="text/javascript">document.write("JS executed");</script>

并且,将以下行添加到您的 manifest.json 中:

"content_security_policy": "script-src 'self' 'sha256-Z4nYjltJ/RciFs77n2n91dzwoz1Qg/1JFwU5ODwWPC8='; object-src 'self';"

关于JavaScript 不在本地页面上运行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44944349/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com