Components.interfaces.nsIProcess截断包含“&”的URL参数

时间:2012-04-14 21:23:56

标签: javascript windows firefox

我有javascript代码(windows / firefox),使用

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

该命令是cmd / c start MYURL

这适用于大多数情况,除非网址包含&,例如

http://www.google.com/search?q=Robert+Doisneau&ct=doisneau12-hp&oi=ddle 被截断为 http://www.google.com/search?q=Robert+Doisneau

从命令行发生同样的事情,但在URL周围加上引号可以解决问题。

所以,我在我的javascript中输入了我的网址,但是当使用双引号时,windows会产生此错误:

  

Windows无法找到   '?\ HTTP://www.google.com/search Q =罗伯特+杜瓦诺&安培; CT = doisneau12马力&安培; OI = ddle \'。   确保正确输入名称,然后重试。

当我在引号中传递URL时,nsIProcess的做法有何不同,我该如何避免?或者我如何重新形成我的网址,以便它不会在&?处被截断我无法取代&使用%26,因为它不是文本的一部分,它用于传递参数。

3 个答案:

答案 0 :(得分: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的一个论点。如果nsIProcess自动引用参数,我不确定,所以你需要对它进行实验。

答案 1 :(得分:0)

这很奇怪,因为我提到的命令行无法使用它:

  • 如果没有添加任何内容,我会收到截断的网址
  • 当我在URL周围的命令行中添加双引号时,我只是打开了新的命令行窗口
  • 当我添加单引号(撇号)时,我收到错误消息。

答案 2 :(得分:0)

您为什么要尝试通过nsIProcess启动网址?只需在浏览器选项卡中加载URL,如果Firefox不理解它,它将自动提示调用该协议的系统处理程序。