问题标签 [protocol-handler]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
windows - 如何检测从哪里调用协议
我正在开发一个应用程序,它需要根据调用协议处理程序的位置做出不同的反应。
假设它需要打印出来,browser
如果它是从 chrome 中调用的
app://something/something
,shell
如果它是从 cmd/powershell 调用的。
根据我目前的理解,我只能接收字符串,所以应该无法检测到它是从哪里调用的,但是我已经看到程序能够推断出它们的调用位置并具有不同的行为基于那个,当我检查这些程序及其协议的 HKEY_CLASSES_ROOT 条目时,无非是program.exe "%1"
我看不到他们收集数据的方式。
我还尝试摆弄这些协议处理程序,它们检测它何时从 C# 和 Process.Start() 而不是常规命令提示符启动,或者是自制的 c# 浏览器而不是 chrome,这让我更加困惑。
security - 通过自定义协议处理程序传递的数据有多安全?
假设您设置了一个自定义协议处理程序来运行带有一些启动数据的应用程序,对吗?
这些数据有多安全?我无法找到任何有关以下内容的资源:
- 浏览器会缓存这些数据吗?
- 其他应用程序是否可以看到此信息通过以及如何传递?
我发现资源讨论了明显的问题,例如攻击站点如果发现您有协议,就会滥用您的协议。
否则,对于希望以这种方式使用他们的网站启动应用程序的开发人员来说,如果我们不希望其他人看到“某些数据”,我们需要担心什么?更具体地说,攻击者如何访问数据?
任何 MDN 或其他官方参考资料将不胜感激!
google-chrome - 允许 HTTP Web 应用程序打开自定义协议而不总是提示
我有一个 Web 应用程序,它使用在客户端设置期间已注册的协议在客户端计算机上打开本地应用程序。Web 应用程序在打开本地应用程序时会发出警报,并会在该警报中选择一个复选框。勾选复选框,下次打开本地应用时浏览器不会提示。
但是,当我的 Web 应用程序使用 https 托管时,会看到此复选框。当使用 http 托管时,浏览器不会给出复选框,并且浏览器总是会引发警报。客户端的用户每次都可以手动做一些事情来避免警报吗?
我查看了谷歌浏览器设置。站点设置中有协议处理程序,但不允许手动输入站点。它显示了我可以删除的outlook.office.com,但没有提供手动输入站点的方法。
是否有解决方法来信任站点而不显示此特定受信任站点的警报
google-chrome - URI 协议处理程序无法运行商店应用程序
URI 协议处理程序允许开发人员将自定义协议与他们的应用程序相关联,以便单击指向我们自定义协议的链接将启动应用程序,而不是在浏览器中打开它。Zoom 和许多其他应用程序使用此功能在单击其 Web 链接时启动其应用程序。
我们使用此方法允许用户在单击特定链接时启动 Microsoft Word。我们的注册表项如下所示(test
是我们自定义协议的名称):
只要安装了 Office 的标准桌面版本(例如 Office 2016、Office 2019 或 Office 365),它就可以正常工作并在单击链接时启动已安装的 Microsoft Word 版本,但似乎不适用于 Microsoft Store Office 版本。
我以为command
上面的节点只是一个shell命令,会被Windows启动,但似乎并非如此。在命令提示符或 Windows 运行对话框甚至批处理文件上键入winword
可以正确启动 Word,但在协议处理程序中使用它似乎没有做任何事情。有趣的是,浏览器确实显示“网站想要启动 Word”提示,但选择“是”似乎没有做任何事情。我也试过移除任何额外的开关,winword
但没有用。替换winword
为其他一些应用程序,例如notepad.exe
正常工作。
我们需要做一些特别的事情来运行 Window Store 应用程序吗?
复制它很简单。
- 只需将上述密钥添加到您的注册表中即可。
- 确保您的计算机上安装了 Microsoft Word。
- 创建一个包含超链接的 HTML 页面,其
href
属性设置为test://example.com
. - 在浏览器中打开页面并单击链接。
这应该会显示一个确认提示,询问您是否要启动 Word。如果您拥有 Word 的标准桌面版本,单击 Yes 将启动 Word,但如果您拥有 Store 版本,则不会执行任何操作。
javascript - 为什么 Firefox 不等待 WebSocket 连接?
我正在编写一个应用程序,它首先尝试打开一个 WebSocket 连接(以确保没有其他连接打开;地址冲突检查),然后触发一个自定义协议,该协议将使用浏览器告诉它的地址启动一个一次性 WebSocket 服务器. 所有通信都是通过 localhost 和一些任意端口号完成的,比如 3000。我没有做任何特别的事情,只是试图打开一个 WebSocket:
在 Chrome 中进行测试时,WebSocket 实际上会保持一段时间的 CONNECTING 状态,这是理想的,因为它给了我们一些时间来通过自定义协议实际启动应用程序。但在 Firefox 中,WebSocket立即以代码 1006 关闭,我不知道为什么。
我尝试将 about:config network.websocket.timeout.open 设置更改为 1000(从 20 开始),但这无济于事。我还发现了这个相关的帖子:Websockets - chrome and firefox Differences? . 这也没有让我找到答案。
我错过了什么?
21 年 11 月 16 日更新
我正在使用 Chrome 和 FF 中的开发工具来检查请求。奇怪的是,Chrome 实际上是按照您的预期发送请求标头,但在 FF 中,请求完全是空的(0 字节)。也许这是FF不支持调试本机WebSockets(没有使用包装库)的问题?是否有一些 FF 设置可以取消请求?但更令人困惑的是,浏览器会点击 close 事件而不会点击 open 事件。
21 年 11 月 17 日更新
我意识到这可能与启动自定义协议处理程序有关?我注意到如果没有启动 CPH,它会等待一秒钟来尝试连接到 Web 服务器,但是当我启动 CPH时,它会立即关闭 WebSocket。CPH 通过指向“_parent”的链接启动。
javascript - 有没有办法检测浏览器是否设置了 mailto 协议处理程序?
我有一个网站可以动态构建一个 mailto url,然后使用 window.open() 在新的选项卡/窗口中打开它。
我现阶段正在 Chrome 中进行测试,因此其他浏览器的行为可能会有所不同。
如果 Chrome设置了mailto 协议处理程序(例如 GMail),那么它会按预期工作。
如果 Chrome没有设置 mailto 协议处理程序,它只会打开一个带有 mailto url 的选项卡,没有其他内容。
这不是最坏的结果,但如果有一种方法可以提前知道,那就太好了,这样可以以某种方式引导用户设置他们的浏览器,以便 mailto url 正常工作。
以前,我只是通过将 window.location.href 设置为 url 在同一页面中打开:
这不是很好,因为如果没有设置协议处理程序,什么都不会发生。如果我至少可以检测到这种情况,但我也无法找到任何迹象,我也会将其视为一种选择。我想一个选择是设置一个计时器,如果它达到执行可以提醒用户?
其他人已经解决了这个问题吗?似乎是一个很常见的要求。
谢谢
python - macOS - 自定义协议处理程序未执行应用程序中提供的 python 脚本
我创建了协议处理程序应用程序来处理自定义协议。我遵循了OSX 中提到的步骤: 定义一个直接指向 Python 脚本的新 URL 处理程序。当我从浏览器运行“myTestProto://abc?param1=1¶m2=2”但未执行应用程序中包含的 python 脚本时,我看到我的应用程序正在启动。
我错过了什么吗?任何帮助深表感谢。
如果我添加“ python ”并提供 python 脚本文件的完整路径,这将有效,如下所示
如何使协议处理程序使用相对路径执行 python 脚本?
excel - Office 协议处理程序适用于 Office 2019,但不适用于 Office 2016
在 Intranet 网页上,我有一个指向驻留在网络驱动器上的 Excel 文档的链接,如下所示:
这是此处描述的办公协议处理程序。
在安装了 Office 2019 的计算机上,使用注册的应用程序 (Excel) 打开 Excel 文档时没有问题;在装有 Office 2016 的计算机上,我收到以下错误:
无法执行该操作,因为 Office 无法识别给出的命令。
我比较了注册表项,\HKEY_CLASSES_ROOT\ms-excel\
它们基本相同(当然路径protocolhandler.exe
不同)。
当我protocolhandler.exe
在装有 Office 2016 的计算机上的命令行上执行时,无论我如何尝试启动 Excel 或 Word 文档(例如ms-excel:ofv|u|file:///...
或ms-word:ofv|u|http://...
) ,我总是会收到上述错误
办公版本:
Office Professional Plus 2019 版本 1808(内部版本 10382.20010 单击并运行)64 位
Office Professional Plus 2016 版本 16.0.5266.1000 MSO 64 位
有没有办法让协议处理程序与 Office 2016 一起工作?