我有 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 被 chop 为 http://www.google.com/search?q=Robert+Doisneau
从命令行也会发生同样的情况,但在 URL 周围加上引号可以解决问题。
因此,我在 javascript 中在 URL 两边加了引号,但是当使用双引号时 Windows 会产生此错误:
Windows cannot find '\http://www.google.com/search?q=Robert+Doisneau&ct=doisneau12-hp&oi=ddle\'. Make sure you typed the name correctly, and then try again.
当我在引号中传递 URL 时,nsIProcess 会做什么不同的事情,如何避免这种情况?或者如何重新构造我的 URL,使其不会在 & 处被 chop ?我无法将 & 替换为 %26,因为它不是文本的一部分,它用于传递参数。
最佳答案
我想我知道发生了什么。 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 是否自动引用参数,因此您需要对此进行试验。
关于javascript - Components.interfaces.nsIProcess chop 包含 "&"的 URL 参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10157485/