确定当前的Javascript实现是否是Rhino

And*_*een 2 javascript java rhino javax.script

我在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);
    }
}
Run Code Online (Sandbox Code Playgroud)

Ber*_*rgi 5

啊,我们在你的评论中得到了它.只需使用功能检测:

var writeMessage = document && document.write
  ? document.write.bind(document)
  : print;
Run Code Online (Sandbox Code Playgroud)

然后使用writeMessage(string)你的脚本.这是一个短期形式

if (document && document.write)
    var writeMessage = function(message) { document.write(message); };
else
    var writeMessage = function(message) { print(message); };
Run Code Online (Sandbox Code Playgroud)

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

function writeMessage(message) {
    if (document && document.write) { // running in a web browser
        document.write(message);
    } else { // it will be Rhino
        print(message);
    }
}
Run Code Online (Sandbox Code Playgroud)

  • @AndersonGreen如果定义`document`而不是null,并且`document.write`也是,那么它将`writeMessage`变量设置为对绑定函数的引用,即`document.write`; 否则,它将`writeMessage`设置为对'print`的引用.基本上,如果你可以使用`document.write`,它会使用它(例如,这可以在大多数浏览器中使用); 如果没有,那么它假定你正在使用Rhino并选择`print`. (2认同)