2

我在 Java 中使用 javax.script,我希望能够检测当前的 Javascript 实现是否是 Rhino。我这样做是因为我需要编写脚本才能在网页和 Rhino 中正常工作。

Javascript伪代码:

function writeMessage(message) {
    if (implementation is Rhino) {
        print(message);
    }
    else if (script is running in a web browser) {
        document.write(message);
    }
}
4

2 回答 2

5

啊,我们在你的评论中得到了它。只需使用特征检测:

var writeMessage = document && document.write
  ? document.write.bind(document)
  : print;

然后writeMessage(string)在整个脚本中使用。这是一个简短的形式

if (document && document.write)
    var writeMessage = function(message) { document.write(message); };
else
    var writeMessage = function(message) { print(message); };

这比您在问题中建议的要好,每次调用函数时都会应用检测:

function writeMessage(message) {
    if (document && document.write) { // running in a web browser
        document.write(message);
    } else { // it will be Rhino
        print(message);
    }
}
于 2012-08-05T18:37:51.567 回答
-2

如果它只是在 Web 浏览器或 Rhino 上运行,那么它们肯定是互斥的;也就是说,如果脚本没有在浏览器中运行,那么它是通过 Rhino 运行的。

于 2012-08-05T18:35:26.693 回答