Javascript Components.interfaces.nsIProcess截断包含“0”的URL参数&&引用;

Javascript Components.interfaces.nsIProcess截断包含“0”的URL参数&&引用;,javascript,windows,firefox,Javascript,Windows,Firefox,我有javascript代码(windows/firefox),它使用 var process = Components.classes["@mozilla.org/process/util;1"].createInstance(Components.interfaces.nsIProcess); 命令是cmd/c start MYURL 这适用于大多数情况,除非URL包含&,例如 被截断为 在命令行中,同样的事情也会发生,但在URL周围加引号可以解决问题 因此,我在javascr

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

    var process = Components.classes["@mozilla.org/process/util;1"].createInstance(Components.interfaces.nsIProcess);
命令是cmd/c start MYURL

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

被截断为

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

因此,我在javascript中的URL周围加了引号,但windows在使用双引号时会产生此错误:

Windows找不到 '\http://www.google.com/search?q=Robert+Doisneau&ct=doisneau12 hp&oi=ddle\'。 请确保键入的名称正确,然后重试


当我用引号传递URL时,NSI过程有什么不同,我如何避免这种情况?或者如何重新设置URL格式,使其不会在&处被截断?我无法将&26替换为%26,因为它不是文本的一部分,它用于传递参数。

这很奇怪,因为我无法从命令行让它工作,正如您提到的:

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

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

我想我知道发生了什么。CMD可以将多个命令作为参数,每个命令用&字符分隔,整个列表用引号括起来

多个参数的格式为CMD/c“arg&arg&arg”。因此&被解释为一个新论点的开始

CMD参数中的转义字符为^。因此,您需要运行:

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

请注意,报价在开始之前开始,在url之后结束。整个部分是传递给CMD的一个参数。我不确定nsIProcess是否会自动引用参数,所以很多人都需要尝试一下

谢谢你,詹姆斯!这正是我需要解决的问题。整个周末我都被难住了。我从未在我设法找到的任何文档中看到有关的信息。@MarybethMarkland如果这是您问题的答案,请在其旁边勾选“v”,以便将其标记为已解决。