0

を使用して URL を起動する JavaScript コード (windows/firefox) があります。

    var process = Components.classes["@mozilla.org/process/util;1"].createInstance(Components.interfaces.nsIProcess);

コマンドは cmd /c start MYURL です

これは、次のように URL に & が含まれている場合を除いて、ほとんどの場合に機能します。

http://www.google.com/search?q=Robert+Doisneau&ct=doisneau12-hp&oi=ddleは http://www.google.com/search?q=Robert+Doisneau に切り捨てられ ます

コマンド ラインからも同じことが起こりますが、URL を引用符で囲むと問題が解決します。

そのため、JavaScript で URL を引用符で囲みましたが、二重引用符を使用すると Windows で次のエラーが発生します。

Windows は '\http://www.google.com/search?q=Robert+Doisneau&ct=doisneau12-hp&oi=ddle\' を見つけられません。名前を正しく入力したことを確認してから、もう一度やり直してください。

URL を引用符で囲んで渡すと、nsIProcess はどのように動作しますか? また、それを回避するにはどうすればよいですか? または、& で切り捨てられないように URL を再形成するにはどうすればよいですか? & を %26 に置き換えることはできません。これはテキストの一部ではなく、パラメーターを渡すために使用されるためです。

4

3 に答える 3

2

私は何が起こっているのか知っていると思います。CMDは、いくつかのコマンドを引数として取ることができます。各コマンドは&文字で区切られ、リスト全体が引用符で囲まれています。

複数の引数の形式は、CMD / c "arg&arg&arg"です。したがって、&は新しい引数の開始として解釈されます。

CMD引数のエスケープ文字は^です。したがって、実行する必要があります。

CMD /C "START http://www.google.com/search?q=Robert+Doisneau^&ct=doisneau12-hp^&oi=ddle"

引用はSTARTの前に始まり、URLの後に終わることに注意してください。その全体がCMDに渡される1つの引数です。nsIProcessが引数を自動引用するかどうかはわかりません。そのため、多くの人がそれを試す必要があります。

于 2012-04-15T18:24:21.213 に答える
0

経由で URL を起動しようとしているのはなぜnsIProcessですか? ブラウザーのタブに URL をロードするだけで、Firefox がそれを理解できない場合は、そのプロトコルのシステム ハンドラーを呼び出すように自動的に求められます。

于 2012-04-14T22:38:54.030 に答える
0

あなたが言ったようにコマンドラインから動作させることができないので、それは奇妙です:

  • 何も追加しないと、切り捨てられた URL が表示されます
  • コマンド ラインで URL を二重引用符で囲むと、単に新しいコマンド ライン ウィンドウが開きます。
  • 一重引用符 (アポストロフィ) を追加すると、エラー メッセージが表示されます。
于 2012-04-14T22:09:33.810 に答える