0

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

    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 的一个参数。我不确定 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 回答