当 url 有标签和问号时,注册自定义 URI 方案在 Windows 7 上不起作用

Posted

技术标签:

【中文标题】当 url 有标签和问号时,注册自定义 URI 方案在 Windows 7 上不起作用【英文标题】:Registering Custom URI Scheme not working on Windows 7 when url has hashtag and question mark 【发布时间】:2018-05-10 00:33:13 【问题描述】:

所以我必须注册一个自定义 uri,cnx://,让 IE 启动 Chrome。

我已经在 Windows 7、Windows 8 和 Windows 10 上测试了我的注册表项。

一切正常,除了在 Win7 上,当 URL 带有标签和问号时:

cnx://www.url.com/something/#place/page.php?foo=bar

无论出于何种原因,它都会被修改为

cnx://www.url.com/something/?foo=bar#place/page.php

我已经通过从

更改重要的注册表项对此进行了测试
[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\CNX\shell\open\command]
@="\"C:\\Program Files (x86)\\Google\\Chrome\\Application\\Chrome.exe\" %1"

只是

[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\CNX\shell\open\command]
@="cmd /k echo %1"

在命令提示符中显式显示修改。

仅在 Windows 7 上发生。 在 Win8 和 Win10 上运行没有问题。 其他 URL 约定在 windows7 上工作得很好,只是当它有 # 和 ?

然后,它被破坏了。

当然,http://www.url.com/something/#place/page.php?foo=bar 工作得很好。它只会在使用此自定义 uri 功能时出错。

任何人都可以提供解决方法吗?

我疯狂地尝试用 %23place 对#place 进行编码,但后来我想把字符串替换回原来的#place

【问题讨论】:

【参考方案1】:
@ECHO OFF
SETLOCAL

:: This part merely for demonstration - begin
CALL :sub "cnx:// www.url.com/something/#place/page.php?foo=bar"
CALL :sub "cnx:// www.url.com/something/?foo=bar#place/page.php"
GOTO :eof
:: This part merely for demonstration - end

:sub
FOR /f "tokens=1-3delims=?#" %%a IN (%1) DO (
 SET "parta=%%a"
 SET "partb=%%b"
 SET "partc=%%c"
)

SET "combo=%parta%#%partb%?%partc%"

IF %* neq "%combo%" SET "combo=%parta%#%partc%?%partb%"

ECHO "C:\Program Files (x86)\Google\Chrome\Application\Chrome.exe %combo%"

GOTO :EOF

ISTM %1 在 Win7 中的提供方式不同,因此诀窍是对 ?# 进行标记化,然后适当地重新组合为标记。

关键应该是

@="thisbatch "%1""

(我相信 - 这里没有专家。重点是 %1 应该是 "quoted"


[对 cme​​ts 的响应 - 即时,未经测试;可能需要一些转义...]

@="cmd /c cd C:\Program Files (x86)\Google\Chrome\Application&FOR /f "tokens=1-3delims=?#" %%a IN ("%1") DO (if " %%a#%%b?%%c"=="%1" (chrome.exe %1) else (chrome.exe %%a#%%c?%%b) )"

【讨论】:

好伤心。谢谢!但是如果乞丐可以选择,有没有办法跳过批处理文件并将其全部作为命令行来完成?类似 cmd /k FOR /f "tokens=1-3delims=?#" %%a IN ("%1") DO ( SET "parta=%%a" SET "partb=%%b" SET "partc= %%c") SET "combo=%parta%#%partb%?%partc%" IF %* neq "%combo%" SET "combo=%parta%#%partc%?%partb%" set "combo= %combo:cnx:// =%" "C:\Program Files (x86)\Google\Chrome\Application\Chrome.exe" "%combo%" ?它不能按原样工作,因为我认为它需要在命令之间添加一些&符号或添加/删除一些百分比......只是不确定在哪里 或者对不起,CMD /c 因为最后关闭命令窗口会很棒,当它完成时。把它烧到我的记忆里,让它作为 CMD /K 来检查输出.... 您的回复似乎很成功。对于遇到此问题的任何其他人,这仅适用于 Win7(可能可以编辑为 8 及更高版本,但目前,这非常适合我的需要)。再次感谢!!! 是的。不幸的是,它丢弃了一堆(如果不是全部)查询字符串参数。我确信在命令中可能需要进行一些额外的编辑,但上面的语法对我来说主要是巫术。上帝保佑你,因为你精通它。我相信你是贵公司的宝贵资产。 哈!现在已经失业16年了。雇主更喜欢挥舞着一张纸的“新毕业生”,而不是那些能告诉他们为什么他们考虑不周的计划行不通的人。

以上是关于当 url 有标签和问号时,注册自定义 URI 方案在 Windows 7 上不起作用的主要内容,如果未能解决你的问题,请参考以下文章

Chrome 自定义标签会在浏览时预加载网页吗?

自定义URI处理程序:Outlook集成?

自定义共享图标 - 获取 url、编码 uri 和替换

注册后天蓝色 b2c 重定向 uri 覆盖

Branch.io 自定义网址缩短器和通用链接

Firebase 动态链接没有与自定义标签上的短 URL 进行深度链接