web-dev-qa-db-ja.com

Chromeからプロトコルハンドラー(ie:url)を使用して)からInternet Explorerを開きます

これらの手順を実行しましたが、正しく機能しません。 Chromeのカスタムプロトコルハンドラ

基本的に、カスタムアプリはありません。特定のURLでIEを開くハンドラーを作成したいだけです。

これが私の登録です:

Windows Registry Editor Version 5.00

[HKEY_CURRENT_USER\Software\Classes\ie]
"URL Protocol"="\"\""
@="\"URL:IE Protocol\""

[HKEY_CURRENT_USER\Software\Classes\ie\DefaultIcon]
@="\"Explorer.exe,1\""

[HKEY_CURRENT_USER\Software\Classes\ie\Shell]

[HKEY_CURRENT_USER\Software\Classes\ie\Shell\open]

[HKEY_CURRENT_USER\Software\Classes\ie\Shell\open\command]
@="\"C:\\Program Files\\Internet Explorer\\iexplore.exe\" \"%1\""

動作しますが、Chromeからie:www.google.comを開くと、IEを開くように求められますが、開いているURLに "ie:"が保持されます...無限ループを生成します。

どうすれば修正できますか?

ありがとう

Screenshot

14
RaspDealer

いくつかのテストの後、私は別の戦略に移ります。代わりに、中間バッチスクリプトを対象とします。そして、バッチはプロトコルとURLを分割し、IEを開きます。

ここにバッチがあります:

echo %1%
set var=%1
set var=%var:~4,-1%
Start "" "%ProgramFiles%\Internet Explorer\iexplore.exe" %var%
1
RaspDealer

プロトコルハンドラを作成する

このスクリプトをinternet-Explorer-protocol-handler.regとして保存:

Windows Registry Editor Version 5.00

[HKEY_CURRENT_USER\Software\Classes\ie]
"URL Protocol"="\"\""
@="\"URL:IE Protocol\""

[HKEY_CURRENT_USER\Software\Classes\ie\DefaultIcon]
@="\"Explorer.exe,1\""

[HKEY_CURRENT_USER\Software\Classes\ie\Shell]

[HKEY_CURRENT_USER\Software\Classes\ie\Shell\open]

[HKEY_CURRENT_USER\Software\Classes\ie\Shell\open\command]
@="cmd /k set myvar=%1 & call set myvar=%%myvar:ie:=%% & call \"C:\\Program Files (x86)\\Internet Explorer\\iexplore.exe\" %%myvar%% & exit /B"

次に、スクリプトを実行して、レジストリにキーをインストールします。次のようになります。

registry

これで、ie:プロトコルを使用するリンクがInternet Explorerで開きます。

<a href="ie:https://www.google.com/">Google</a>

デモページ

5
Jeremy Danyow

パラメータと特殊文字(&、%など)を含む拡張URLの問題を解決する解決策を次に示します。

このように: https://www.google.com/search?q=open-internet-Explorer-from-chrome-using-a-protocol-handler&oq=open-internet-Explorer-from-chrome-using -a-protocol-handler&aqs = chrome..69i57j69i60l3.1754j0j4&sourceid = chrome&ie = UTF-8

Regファイルのコマンドを次のように置き換えます。

powershell -windowstyle hidden -command "& {$Url = '%1' ;  $Url = $Url -replace 'ie:',''; $IE=new-object -com internetexplorer.application ; $IE.navigate2($Url) ; $IE.visible=$true }"
1
7rB

作業レジストリ

Windows Registry Editor Version 5.00

[HKEY_CURRENT_USER\Software\Classes\ie]
"URL Protocol"=""
@="URL:IE Protocol"

[HKEY_CURRENT_USER\Software\Classes\ie\Shell]

[HKEY_CURRENT_USER\Software\Classes\ie\Shell\open]

[HKEY_CURRENT_USER\Software\Classes\ie\Shell\open\command]
@="cmd /c set url=\"%1\" & call set url=%%url:ie:=%% & call start iexplore -nosessionmerging -noframemerging %%url%%"

重要な注意事項:

  1. %1を二重引用符で囲む必要があります。そうしないと、example.com?a=1&b=2のような複数のパラメーターを持つURLはexample.com?a=1に削除され、&の後のパラメーターは無視されます。
  2. iexploreを呼び出すときは、二重引用符を削除する必要があります。二重引用符を削除せずに、複数のIEウィンドウをChromeから開くと、最初のIEウィンドウのみが正しいURLを取得します。ただし、コマンドset url=%%url:\"=%%またはset url=%%url:~1,-1%%は機能しません。
  3. これらの引用符を削除できない場合は、_iexplore-nosessionmerging-noframemergingのスイッチを追加します。これらは コマンドラインオプション IEの「マージ」動作を制御します。
0
CDT

次のコマンドは、渡されるすべてのクエリパラメータに対して機能します。

cmd/C set myvar = "%1"を呼び出し、set myvar = %% myvar:ie:= %%を呼び出し、start/separate "iexplore.exe" %% myvar %%を呼び出して終了します。

0
user10522000

レジストリの最後の行を次のようにすると、レジストリの実装はより一般的になります。

_@="cmd /C set myvar=%1 & call set myvar=%%myvar:ie:=%% & call start /separate iexplore %%myvar%% & exit"
_

カスタムスクリプトを作成する必要はありません。

ターゲットURLに複数のクエリパラメータを含めることができる場合、最初のパラメータのみがIEに渡されるという問題に直面する可能性があります(IE検証)このような場合は、次の回避策を実行できます...エンコード後にターゲットURLを渡す新しいhtmlファイルを作成し、IEでこのHTMLを開きます。

window.location = "ie:"+<URL to the above HTML>+"?path="+encodeURIComponent(<target URL>);

HTMLファイルで、デコードされたターゲットURLにリダイレクトする

_<html>
        <head>
                <title>
                        IE Redirect
                </title>
                <script>
                        function getUrlVars() {
                                var vars = {};
                                var parts = window.location.href.replace(/[?&]+([^=&]+)=([^&]*)/gi,
                                function(m,key,value) {
                                        vars[key] = value;
                                });
                                return vars;
                        }

                        function openURL(){
                                window.location.href=decodeURIComponent(getUrlVars()["path"]);
                        }
                </script>
        </head>
        <body onload="openURL()">

        </body>
</html>_

上記は私のアプリケーションで完全に機能しました。

0
Saurabh

次のコマンドは、渡されるすべてのクエリパラメータに対して機能します。

cmd/C set myvar = "%1"を呼び出し、set myvar = %% myvar:ie:= %%を呼び出し、start/separate "iexplore.exe" %% myvar %%を呼び出して終了します。

リンクにアンパサンドがあり、アンパサンドが削除された後はIE11で開かない場合は、二重引用符を使用する必要があります。

0
DaveC