NSExtensionRequestHandling 不处理本机消息

2024-04-02

我正在尝试为我的本机应用程序创建 Safari Web 扩展。我想要一个带有按钮的弹出窗口,单击该按钮将与我的本机应用程序进行通信。在开始这部分之前,我在发送本机消息并在其中处理它时遇到了问题beginRequest类中的函数符合NSExtensionRequestHandling协议。我没有做太多事情,因为我依赖于 Xcode 生成的代码。

in manifest.json我添加了nativeMessaging像这样的许可:

"permissions": [ "nativeMessaging" ]

popup.js其中包含事件监听器:

console.log("Hello World!", browser);

document.addEventListener('DOMContentLoaded', function() {
    var checkPageButton = document.getElementById('clickIt');
    checkPageButton.addEventListener('click', function() {
        console.log("click")
        browser.runtime.sendNativeMessage({ message: "Hello" });
    }, false)
}, false)

当我检查弹出元素时,我可以看到Hello World and click消息,但正如我之前提到的 -beginRequest不被调用。有什么遗漏吗? 我也看了Meet Safari Web Extensions session https://developer.apple.com/videos/play/wwdc2020/10665/来自 WWDC20 但我没有找到答案。


由于可能有多种原因导致此问题,因此我会尝试以下方法来帮助调试问题。

  • 确保您已在功能中设置了应用程序组,并将扩展程序和应用程序设置为 Xcode 中的同一应用程序组。

  • 检查 Safari 菜单中的“开发人员”->“允许未签名扩展”是否已启用。 (如果您没有看到“开发人员”,您需要在“首选项”->“高级”中启用它。

  • 确保您拥有正确的权限manifest.json例子:

 "permissions": [ "nativeMessaging", "<all_urls>" ] 

我认为你不能打电话sendNativeMessage from popup.js or content.js。我相信你只能从background.js。所以你必须调用 popup.js -> background.js -> sendNativeMessage。

如果您查看 Safari 开发菜单、检查器,您可能会看到类似“未定义不是函数(sendNativeMessage)"。当未从以下位置调用时会发生这种情况background.js或者其他权限问题。

  • 另外,查看您的 Console.app -> 错误和故障(按包 ID 过滤),看看是否存在任何类型的权限问题。

你无法“看到”是否beginRequest通过查看 Xcode 日志或在此函数中设置断点来调用。当它在自己的进程中运行时,它永远不会遇到断点或打印到 Xcode 日志。您的调试器附加到您的应用程序,而不是扩展进程。

为了使用调试器SafariWebExtensionHandler,您必须将 Xcode 调试器附加到正在运行的 Safari 扩展进程才能命中断点。Xcode -> Debug -> attach to process.

此外,如果您使用 Xcode 中的默认模板,它会调用os_log同样,登录到 Console.app 而不是 Xcode(扩展在其自己的进程中运行)。

我强烈建议任何有本机消息传递问题或想要更全面解释的人至少观看本次会议的最后 5 分钟以获取更多信息:WWDC 2020:认识 Safari Web 扩展 https://developer.apple.com/videos/play/wwdc2020/10665/

Apple 的文档也非常有帮助:Safari Web 扩展中应用程序和 JavaScript 之间的消息传递 https://developer.apple.com/documentation/safariservices/safari_web_extensions/messaging_between_the_app_and_javascript_in_a_safari_web_extension

and 在 Safari 应用程序扩展和注入脚本之间传递消息 https://developer.apple.com/documentation/safariservices/safari_app_extensions/passing_messages_between_safari_app_extensions_and_injected_scripts

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

NSExtensionRequestHandling 不处理本机消息 的相关文章

  • document.execCommand('copy') 有大小限制吗?

    我使用的 document execCommand copy 与此处描述的类似 https developers google com web updates 2015 04 cut and copy commands https deve
  • goJS 下拉菜单删除项目

    我有简单的 python Flask goJS 图形应用程序 如下所示 节点和链接文本的源是从应用程序的后端加载的 我将它们设置为model modelData像这样的部分 var graphDataString JSON parse di
  • getScript 本地加载而不是全局加载?

    根据我的阅读 JQuery 的 getScript 函数使用名为 global eval 的函数在全局上下文中加载脚本文件 是否有特定的设置或方法可以更改此设置 以便它将改为在我调用它的函数中加载 如果我执行以下代码名称 则返回未定义 因为
  • 使用 vanilla JavaScript 将事件绑定到动态创建的 HTML 元素 [无 jquery] [重复]

    这个问题在这里已经有答案了 我需要将事件附加到动态创建的元素 借助 jQuery 我可以使用以下代码对此进行归档 body on click my element function 如果我添加一个新的 my element 它会自动附加事件
  • Web SQL 将数据插入多行

    我尝试在 Web SQL 数据库中一次将变量插入多行 但使用我所知的所有方法时 我收到错误 INSERT INTO tab a b VALUES v1 v2 v3 v4 gt gt could not prepare statement 1
  • 如何在 javascript/jquery 中进行非阻塞睡眠?

    如何在 javascript jquery 中进行非阻塞睡眠 冒着从评论者那里窃取答案的风险 请使用设置超时 https developer mozilla org en US docs Web API WindowTimers setTi
  • 提交后如何重置表单?

    我有一个简单的表格 假设它需要一个电子邮件地址 提交表单后 消息堆栈会通知用户其地址已成功提交 问题是 提交地址后 带有电子邮件的表单字段仍然包含用户输入的电子邮件地址 我该如何重置该字段 我必须为此使用 JavaScript 吗 谢谢 w
  • NodeJS Express 中每个请求的全局范围

    我有一个基本的快速服务器 需要在每个请求处理期间存储一些全局变量 更深入地说 请求处理涉及许多需要存储在变量中的操作 例如global transaction 当然 如果我使用global范围 每个连接都将共享其事务的信息 并且我需要一个全
  • 将对象传递给jquery中的回调函数

    我最近正在开发小型聊天模块 该模块需要不断检查服务器是否有新消息 我正在向服务器发送 ajax 请求 服务器将保持连接 直到找到新消息 长轮询 Code var chatController function other variable
  • Firestore onSnapshot() 方法多次触发

    我有一个带有多个路由和 vuex 的 vue cli 4 应用程序 Firestore 数据库已成功连接 我的应用程序立即反映从 Firestore 控制台应用于数据库的修改 在离开包含与 Firestore 同步 的组件的路线然后返回后
  • $index 中的 AngularJS 数字

    举例来说 我有以下代码 伪 div index div 结果将是 1 2 3 4 5 6 我怎样才能改变上面的代码以便打印索引 001 002 003 004 005 006 以便索引打印为 3 位数字 您可以使用过滤器轻松完成此操作 首先
  • 最有用的 jQuery 原生 API 函数

    前 5 10 个最常用的 jQuery 本机 API 函数是什么 请不要建议 jQuery 函数本身 因为毫无疑问这是最常用的函数 如果可能的话 还请提供它们所涵盖的场景 提出这个问题的原因是我尝试创建一个类似 jQuery 的 API充足
  • 是否存在必须在 HTML/JavaScript 中使用早期绑定/内联事件属性的情况

    在我对以下问题的回答中 事件绑定是什么意思 https stackoverflow com q 6329996 144491 我顺便说一下 使用 inline JavaScript Early Binding 来绑定 JavaScript
  • JavaScript 数组中的空项和未定义项有什么区别? [复制]

    这个问题在这里已经有答案了 考虑以下 JavaScript 代码 在节点 REPL 中 gt let a new Array 10 undefined gt a lt 10 empty items gt gt a map e gt 1 lt
  • 传单地图显示为灰色

    我正在启动 leaflet js快速开始 http leafletjs com examples quick start html但我的地图显示为灰色 我缺少什么吗 脚本 js var leafletMap L map leafletMap
  • Javascript onclick隐藏div

    我想使用 javascript 隐藏这个警告 div 我的 javascript 正确吗 我想在单击关闭图标时隐藏 关闭 div images close icon gif div strong Warning strong These a
  • 将纬度/经度转换为 X/Y,以便在美国地图图像上进行阿尔伯斯投影

    我正在尝试使用 C 或 Javascript 将纬度 经度转换为 X Y 坐标 以将带有 CSS 的 div 左 上 定位到美国地图的背景图像上 美国的标准地图投影是阿尔伯斯投影 如下所示 但 StackOverflow 仅提供参考基本墨卡
  • JavaScript TypedArray 混合类型

    我正在尝试使用 WebGL 并希望将一些不同类型混合到一个字节缓冲区中 我知道 TypedArrays 可以达到这个目的 但不清楚我是否可以与它们混合类型 OpenGL 顶点数据通常是与无符号字节或整数混合的浮点数 在我的测试中 我想将 2
  • jQuery() 与 jQuery.parseHtml() 空格语法错误

    我有一行 javascript 导致 jQuery 中出现语法错误 document find Container replaceWith data find Content 代码本身如果相当无害的话 它所做的只是从 ajax 调用获取响应
  • gulp-uglify 不会保留文件顺序

    当我使用吞咽丑化 https github com terinjokes gulp uglify为了缩小 Javascript 文件 顺序变得混乱 可以说我让这个任务按预期工作 var gulp require gulp var renam

随机推荐

  • 替换

    以前有人问过这个问题 但我从未见过足够的答案 是否有有效的替代品
  • 如何将数据库与微服务(以及新的)同步?

    我正在开发一个采用微服务架构的网站 每个服务都拥有一个数据库 数据库存储微服务所需的数据 Post Video服务需要用户信息 因此订阅的两个服务NEW USER EVENT The NEW USER EVENT当有新用户注册时将被触发 一
  • vi 退出后如何恢复终端内容?

    像 vi 或 man 或任何其他程序这样的程序如何用程序自己的内容替换终端内容 然后在退出这些程序后它们会带回旧的终端内容 Vi 翻转到终端支持的备用屏幕缓冲区 这是通过使用转义序列来实现的 看这个链接 http invisible isl
  • 从链表中删除最小值[关闭]

    很难说出这里问的是什么 这个问题是含糊的 模糊的 不完整的 过于宽泛的或修辞性的 无法以目前的形式得到合理的回答 如需帮助澄清此问题以便重新打开 访问帮助中心 help reopen questions 我需要从链表中删除最小的元素值 喜欢
  • 在地图周围绘制各州省份,并用德国邮政编码着色

    我正在尝试创建一张地图 在其中按德国邮政编码进行着色 并且我想添加德国各州作为边界 for loading our data library raster library readr library readxl library sf li
  • 如何从 GAC 加载程序集?

    我正在尝试使用 Assembly Load 加载 GAC 中的程序集 例如 假设我想列出存在于的所有类型演示核心 dll 我该如何加载演示核心 dll 当我尝试这个时 Assembly a Assembly Load Presentatio
  • MUI:如何以编程方式删除 DataGrid 中选定的行?

    我正在使用 MUI 创建文件列表DataGrid 用户可以选中复选框DataGrid做出他们的选择 我希望在用户执行某些操作 例如删除所选文件 后重置该复选框 我面临的问题是在执行删除操作后 该复选框仍然在同一位置被选中 例如 在我按下删除
  • 更改搜索栏拇指的大小

    我正在使用可绘制的搜索栏拇指 android thumb drawable thumb 我怎样才能设置这个拇指的大小dip单元 因为我使用类似搜索栏的样式 我想要拇指12dip高度和宽度 对我来说设置拇指大小的最灵
  • org.springframework.beans.factory.BeanCreationException:创建类路径资源中定义的名称为“scriptDataSourceInitializer”的bean时出错?

    我是学习 Spring Boot Web 的新手 我已经开始学习 spring jpa 数据 我使用 h2 数据库 我想使用插入测试数据 org springframework beans factory BeanCreationExcep
  • 仅显示 SQL 查询的前 N ​​行输出

    有没有办法只显示前 N 行输出SQL query 如果查询停止运行一次 则奖励积分N输出行 我最感兴趣的是找到适用于的东西Oracle 如果您指定您的目标数据库将会很有帮助 不同的数据库有不同的语法和技术来实现这一点 例如 在 Oracle
  • Git:如何排除存储库中的子文件夹?

    我已经在我的项目的文件夹中创建了一个存储库 你知道 git init 我有Webstorm文件夹 idea另一个与此无关的文件夹 我对保留在存储库中不感兴趣 并且我不希望此文件夹显示为要添加的新文件 我想忘记这些子文件夹 如何在提交整个存储
  • vertx 内的多线程

    我是 vert x 的新手 我正在尝试 vert x NetServer 功能 http vertx io core manual java html writing tcp servers and clients http vertx i
  • 下载 Fuchsia 源代码 - Jiri 钩子由于更新项目或包时出现致命错误而未运行

    Per 获取紫红色源代码 https fuchsia dev fuchsia src development source code echo PATH media cwh 32GB swdev fuchsia jiri root bin
  • 如何在 SQLite 中拥有自动时间戳?

    我有一个 SQLite 数据库版本 3 我正在使用 C 创建一个使用该数据库的应用程序 我想在表中使用时间戳字段来实现并发 但我注意到当我插入新记录时 该字段未设置 并且为空 例如 在 MS SQL Server 中 如果我使用时间戳字段
  • OpenCV 使用 k 均值对图像进行色调分离

    我想在 C 接口 cv 命名空间 中使用 k means 和 OpenCV 对图像进行色调分离 但得到了奇怪的结果 我需要它来减少一些噪音 这是我的代码 include cv h include highgui h using namesp
  • 在 AngularJS 中下载 zip 文件

    尝试在 AngularJS 中下载 zip 文件 我查看了AngularJS 从服务器下载pdf文件 https stackoverflow com questions 25490007 angularjs download pdf fil
  • 按时间间隔分组

    我需要将我的表分组为 15 分钟的间隔 我可以这样做 select dateadd minute datediff minute 0 ts 15 15 0 sum goodpieces from StationCount Group by
  • 在mongodb中查找按距离排序的LineString附近的点

    我有一组代表街道 黑线 的点和代表地图上某个地点的点 红点 我想找到指定街道附近的所有点 按距离排序 我还需要能够指定最大距离 蓝色和绿色区域 这是一个简单的例子 我想用 near运算符 但它只接受Point作为输入 而不是LineStri
  • 如何确定您是否使用不带 $_SERVER['HTTPS'] 的 HTTPS

    我在网上看到很多教程说你需要检查 SERVER HTTPS 如果服务器连接受 HTTPS 保护 我的问题是在我使用的一些服务器上 SERVER HTTPS 是一个未定义的变量 会导致错误 我可以检查是否还有另一个应该始终定义的变量 需要明确
  • NSExtensionRequestHandling 不处理本机消息

    我正在尝试为我的本机应用程序创建 Safari Web 扩展 我想要一个带有按钮的弹出窗口 单击该按钮将与我的本机应用程序进行通信 在开始这部分之前 我在发送本机消息并在其中处理它时遇到了问题beginRequest类中的函数符合NSExt