• 在Chrome浏览器中点击链接,打开IE浏览器,跳转到指定页面并传递参数


    需求:

    在Chrome浏览器中点击链接,打开IE浏览器,跳转到指定页面并传递参数

    过程:
    一些应用软件可以通过点击URL链接启动并执行操作(例如迅雷),这是如何做到的呢?
    主要是通过修改注册表,注册URL Protocol。
     
    阶段一:点击链接,打开IE浏览器,并传递单个参数
     
    新建alert.reg
    Windows Registry Editor Version 5.00

    [HKEY_CLASSES_ROOTalert]
    @="URL:Alert Protocol"
    "URL Protocol"=""

    [HKEY_CLASSES_ROOTalertDefaultIcon]
    @="iexplore.exe,1"

    [HKEY_CLASSES_ROOTalertshell]

    [HKEY_CLASSES_ROOTalertshellopen]

    [HKEY_CLASSES_ROOTalertshellopencommand]
    @="cmd /c set m=%1 & call set m=%%m:alert:=%% & call "C:\Program Files\Internet Explorer\iexplore.exe" %%m%%"
    注释:
    set m=%1(%1为传递过来的参数,将其赋给变量m)
    set m=%%m:alert:=%%(将前缀alert:清除)
    "C:\Program Files\InternetExplorer\iexplore.exe" %%m%%(打开IE浏览器并跳转到指定页面)
    测试链接:
    <a href="alert://www.baidu.com?a=1" />test
    运行效果:
     
    打开IE浏览器并传递参数a成功!
    阶段二:传递多个参数
    测试链接:
    <a href="alert://www.baidu.com?a=1&b=2" />test

    运行效果:
     

    参数b传递失败


    修改alert.reg

    [HKEY_CLASSES_ROOTalertshellopencommand]@="cmd /c set m=%1 & echo 1的值:%1 & call echo m的值:%%m%% & call set m=%%m:alert:=%% & call "C:\Program Files\Internet Explorer\iexplore.exe" %%m%% & exit"


    运行效果

     
     
    原因分析:
    set m=%1,此处%1会直接替换成alert://www.baidu.com?a=1&b=2,&符号将之分为两个命令,m=alert://www.baidu.com?a=1b=2

    看来特殊符号&是无法直接传递了,于是想到了用自定义的分隔字符串separator来替代&符号,并在传递给IE前,将其替换回&符号。

    修改alert.reg

    [HKEY_CLASSES_ROOTalertshellopencommand]
    @="cmd /c set m=%1 & call set m=%%m:alert:=%% & call set m="%%m:separator=&%%" & call "C:\Program Files\Internet Explorer\iexplore.exe" %%m%%"


    测试链接:

    <a href="alert://www.baidu.com?a=1separatorb=2" />test


    运行效果:

     


    参数b传递成功!

    本以为可以功成身退了,却发现个诡异的现象。
    第一次点击测试链接OK,不关闭IE的情况下再次点击链接,新弹出的IE地址有误,效果如下:

     

    地址栏变为了:http://%22//www.baidu.com/?a=1&b=2%20%20"

    修改alert.reg

    [HKEY_CLASSES_ROOTalertshellopencommand]
    @="cmd /c set m=%1 & call set m=%%m:alert:=%% & call echo 第一次替换:%%m%% & call set m="%%m:separator=&%%" & call echo 第二次替换:%%m%% & call "C:\Program Files\Internet Explorer\iexplore.exe" %%m%%"


    运行效果:

     


    原因分析:
    执行m="%%m:separator=&%%"后,m的值变为了"//www.baidu.com/?a=1&b=2  "
    看来问题出在双引号上,但因为包含特殊字符&,此处必需使用双引号。
    尝试各种写法未果,后经培高人指点,将具体的操作写到bat文件中,在此处调用该bat。


    C:Program FilesWisoftAlert目录下新建alert.bat

    @echo off
    set m=%m:alert:=%
    set m="%m:separator=&%"
    start "" "C:\Program Files\Internet Explorer\iexplore.exe" %m%
    exit


    修改alert.reg

    [HKEY_CLASSES_ROOTalertshellopencommand]
    @="cmd /c set m=%1 & "C:\Program Files\WisoftAlert\alert.bat" %%m%% & exit"


    多次点击测试链接均成功!(效果图略)

    阶段三:方便用户操作
    新建runreg.bat,自动注册协议

    REGEDIT /S alert.reg


    通过WinRAR将alert.regalert.batrunreg.bat打包成exe文件

     
     
    解压路径需与alert.reg中一致 

    解压后自动运行runreg.bat,写入注册表信息 

    静默执行

    阶段四:链接中直接使用&符号
    修改alert.reg,将参数%1用双引号引起来

    [HKEY_CLASSES_ROOTalertshellopencommand]
    @=""C:\Program Files\WisoftAlert\alert.bat" "%1""


    修改alert.bat

    @echo off
    set m=%1%
    set m=%m:alert:=%
    start "" "C:\Program Files\Internet Explorer\iexplore.exe" %m%
    exit


    测试链接:

    <a href="alert://www.baidu.com?a=1&b=2" />test


    测试成功!

  • 相关阅读:
    Android sensor 系统框架 (一)
    enc28j60网卡驱动模块添加进linux内核,Kconfig,Makefile配置过程
    Linux samba服务器配置
    为群晖加把锁:使用ssh密钥保障数据安全
    浦发银行网上银行U盾证书无法更新的解决办法
    克隆Linux系统的网卡设置
    Linux路由:CentOS6的多种玩法
    专心学LINUX:CentOS关闭屏幕自动锁定和睡眠
    群晖:关闭软路由利用双网卡桥接直连电脑上网
    Ceph之二----部署Ceph集群
  • 原文地址:https://www.cnblogs.com/xianlei/p/9536634.html
Copyright © 2020-2023  润新知