当 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"
[对 cmets 的响应 - 即时,未经测试;可能需要一些转义...]
@="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 上不起作用的主要内容,如果未能解决你的问题,请参考以下文章