确定当前Javascript实现是否为Rhino
我正在Java中使用javax.script,我希望能够检测当前的Javascript实现是否是Rhino。我这样做是因为我需要编写脚本,以便在web页面和Rhino中正常工作 Javascript伪代码:确定当前Javascript实现是否为Rhino,java,javascript,rhino,javax.script,Java,Javascript,Rhino,Javax.script,我正在Java中使用javax.script,我希望能够检测当前的Javascript实现是否是Rhino。我这样做是因为我需要编写脚本,以便在web页面和Rhino中正常工作 Javascript伪代码: function writeMessage(message) { if (implementation is Rhino) { print(message); } else if (script is running in a web browser)
function writeMessage(message) {
if (implementation is Rhino) {
print(message);
}
else if (script is running in a web browser) {
document.write(message);
}
}
如果只是在网络浏览器或Rhino上运行,那么它们肯定是相互排斥的;也就是说,如果脚本没有在浏览器中运行,那么它是通过Rhino运行的。啊,我们在您的评论中看到了它。只需使用功能检测:
var writeMessage = document && document.write
? document.write.bind(document)
: print;
然后在整个脚本中使用writeMessage(string)
。这是一个很好的例子
这比您在问题中建议的要好,在问题中,每次调用函数时都会应用检测:
function writeMessage(message) {
if (document && document.write) { // running in a web browser
document.write(message);
} else { // it will be Rhino
print(message);
}
}
为什么不用Java代码检查一下呢?我正在尝试编写一个脚本,它既可以在Rhino中工作,也可以在web页面上工作。那么,为什么它不能在这两种语言中工作呢?如果有区别,你可以在上面使用特征检测@Bergi可以用Javascript而不是Java代码检查它吗?我认为用“打印(字符串)”替换每次出现的“document.write(string)”会很麻烦。是的,特征检测就是我在这里要做的。它不是非此即彼。我计划在Rhino以及一些网页中使用该脚本。如果脚本在Chrome中运行,我会使用“console.log”,如果脚本在Rhino中运行,我会使用“write”。替代选项是什么?他的意思是:只有两个选项可以运行,当脚本执行时,它正好在其中一个选项中运行。@Bergi,那么,它们不应该相互排斥吗?如果我错了,请原谅。@veer为什么选项会相互排斥?可以编写一个在Rhino和浏览器中正常运行的脚本(使用功能检测)。我没有看到变量“pring”的声明。这指的是什么?@AndersonGreen这是一个打字错误;他的意思是打印。那么这个代码实际上是做什么的呢?语法对我来说有点不清楚。可以在没有问号运算符的情况下重新编写吗?Javascript中三元运算符语法的解释(在这种情况下很难理解):@AndersonGreen If
document
已定义且不为空,并且document.write
也已定义,然后将writeMessage
变量设置为对绑定函数的引用,即document.write
;否则,它会将writeMessage
设置为对print
的引用。基本上,如果您可以使用document.write
,它就会使用它(例如,这在大多数浏览器中都适用);如果不是,则它假定您正在使用Rhino,并选择打印。
function writeMessage(message) {
if (document && document.write) { // running in a web browser
document.write(message);
} else { // it will be Rhino
print(message);
}
}