JavaScript 不在本地页面上运行

2023-11-29

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

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": "[email protected]",
      "strict_min_version": "45.0"
    }
  },

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

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

}

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


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

您可能正在遇到默认内容安全策略这是:

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

意思就是内联 JavaScript 将无法运行。换句话说,您的 HTML 中不允许出现以下内容:

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

or

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

or

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

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

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

使用内联脚本:
如果您想使用内联脚本,可以使用content_security_policy键入你的清单.json文件。但是,您需要提供““script-src”指令中脚本的哈希值。"

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

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

请注意:这将是一个向后不兼容的更改对于任何不遵守此 CSP 的 Firefox WebExtension。不遵守 CSP 的现有 WebExtension 需要更新。

您的具体案例:

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

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

并且,将以下行添加到您的清单.json:

"content_security_policy": "script-src 'self' 'sha256-Z4nYjltJ/RciFs77n2n91dzwoz1Qg/1JFwU5ODwWPC8='; object-src 'self';"
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

JavaScript 不在本地页面上运行 的相关文章

随机推荐

  • 使用正则表达式重新字符串匹配提取 URL 链接 - Python

    我一直在尝试使用 re api 从文本文件中提取 URL 任何以 http https 和 www 开头的链接 该文件包含文本以及 html 源代码 html 部分很容易 因为我可以使用 BeautifulSoup 提取它们 但普通文本似乎
  • 工作窃取算法[关闭]

    Closed 这个问题需要多问focused 目前不接受答案 我正在读一篇关于并发运行时的文章 其中有一个算法名为work stealing在本文中 但我不知道这个算法是什么 所以我想要一些解释或一些好的链接来帮助我介绍这个算法 这些有帮助
  • R错误:要替换的项目数不是替换长度R的倍数

    我编写了以下代码并收到错误 要替换的项目数不是代码行中替换长度的倍数 X after count c censN1 censN2 censN3 网上查了一下 发现问题可能是由于预先确定的样本数量不匹配造成的 n samples of NA和
  • 如何通过不同端口(80 除外)启动 nginx

    你好 我是 nginx 的新手 我尝试在我的服务器 运行 Ubuntu 4 上设置它 该服务器已经运行了 apache 所以之后我apt get install它 我尝试启动nginx 然后我收到这样的消息 Starting nginx t
  • 致命错误和非致命错误之间的区别

    当尝试编译代码时 IDE 中显示的致命错误和非致命错误之间的主要区别是什么 在这两种情况下 编译器都会显示错误消息 并且程序不会被编译 致命错误是编译器或链接器中未定义的编译器错误吗 A 致命错误可能会立即停止编译该翻译单元 编译器可能会在
  • 请求实体太大 PHP

    在我的 CakePHP 站点之一中 我收到此错误 请求的实体太大 我不知道出了什么问题 我认为我通过表单发布的数据太大 我在搜索引擎中搜索了这个 发现我必须增加post max size 默认情况下我认为它设置为8M 但不知道如何增加pos
  • Puppeteer - 协议错误 (Page.navigate):目标已关闭

    正如您在下面的示例代码中看到的 我使用 Puppeteer 和 Node 中的一组工作人员来通过给定 URL 运行多个网站屏幕截图请求 const cluster require cluster const express require
  • JsonMappingException:当前令牌不是 START_OBJECT(需要解开根名称“Transaction[]”),而是 START_ARRAY

    我正在使用Spring的休息模板来消耗充电接口 使用 JSON 作为负载格式 它一直进行得很顺利 但是当我尝试获取对象数组时 它惨败了 例如 请考虑以下情况 Transaction transactions restTemplate get
  • 为什么分配一个任务然后等待它允许并行运行[重复]

    这个问题在这里已经有答案了 我一直在玩异步 我遇到了一些我以前没有注意到的行为 如果这是重复的 请告诉我 但我的谷歌福让我失败了 主要是因为我想不出合适的搜索条件 给定一个简单的异步方法来执行一些参数化工作 async Task
  • 如何在Google新的NavigationView中将MenuItem添加到SubMenu?

    我为抽屉菜单制作了一个 xml 其中包含以下 MenuItem
  • 导入时 EF4 去除表前缀

    我正在尝试自动重命名表名称以去掉 EF4 中的前导前缀 我知道这可以在 GUI 中完成 但是 我的公司在 Visio 中创建了数据库架构 并使用它在 SQL 中创建数据库创建脚本 我们经常这样做 有时有很多表 所以使用 GUI 并不是一个理
  • 在本地运行时更改 localhost 域

    我正在使用 Visual Studio 因为我的 IDE 正在开发 net Web 应用程序 我使用本地 IIS7 Web 服务器来运行该应用程序 它在 url gt 下运行http localhost 应用程序名称 我想将其更改为 gt
  • .net 中是否有现有的库可以将 JSON 解析为 Dictionary

    我希望能够将表示对象的 JSON 字符串解析到可以在 C 中使用的属性包 如字典 中 给定这个字符串 id 1 name 某个名称 某个参数 2 我想最终得到一个字典 其中包含 id name 和 some parameter 作为键 并分
  • mtcars ggplot 不知道如何处理类数字

    我只是想使用 mtcars 和 ggplot 制作一个简单的绘图 ggplot data mtcars aes x mpg y hp geom line mpg hp col cyl 但我收到错误 ggplot 不知道如何处理类数字 到底是
  • 如何在MS Access查询中直接使用系统用户名?

    我想知道是否有办法获取系统用户名并直接在 MS Access 查询中使用它 我已经在表单上的组合框的查询中设置了参数 并且还使用 ENVIRON 用户名 在 Access VBA 中获取了系统名称 请告诉我这是否可能 您需要创建一个返回用户
  • 是否可以使用变量作为格式中的填充参数!宏?

    我想模仿Python的rjust ljust and center函数使用format 宏 但我只能找到一个可以传递字符串和宽度的解决方案 如果你想传递 fill argument 是行不通的 文档告诉我可以提供变量format 对于宽度参
  • 如何运行具有详细输出的 PowerShell 脚本?

    我想知道是否有一种方法可以运行 PowerShell 脚本 以便打印脚本每一行的命令和输出 例如 在 Bash 中你可以这样写bash x myscript或放置一个set x在脚本的顶部 在批处理中 您将省略 echo off传统上留在脚
  • 选择与 SQLite 中的条件匹配的最新行

    假设我有一张桌子 Name status timestamp 我想选择与 status active 匹配的行 但仅选择那些具有最新时间戳的行 所以如果有这样的行 Bob active 5 10 2010 Bob active 6 12 2
  • 设置控件属性时,ASP.NET 引用字符编码会导致问题

    我有一个 ASP NET Web 应用程序 在某个时候我会这样做 mycontrol stringparameterforjscript document getElementById myotherparam value Hello 问题
  • JavaScript 不在本地页面上运行

    我有一个非常简单的网络扩展 当单击按钮时 它应该在新窗口中打开本地页面 function openMyPage var popupURL chrome extension getURL my page html chrome windows