# The default / alternative engine depends on the device class. # On devices with a lot of memory (e.g. Passion/Sholes),the # default is V8. On everything else,the only choice is JSC.
我的问题是:有什么办法可以确定网页,嵌入式WebView或应用程序中使用哪个JavaScript引擎?
如果答案是否定的,有没有人知道Android模拟器使用哪个JS引擎?
我问的原因是因为这个问题:http://code.google.com/p/android/issues/detail?id=12987
基本上,这可能是Android 2.3.X中的JSC中的JavaScript到java桥断了,这会影响我正在写的应用程序.我在模拟器上看到了JNI深处的一个segfault,但没有在我测试过的一些物理设备上.我试图确定这是一个只有模拟器的东西,一个JSC的东西,还是一些不同的东西.
解决方法
所以,而不是担心V8与JSC,只是担心你想要的功能.我不知道有关JSC的任何内容,但是我们假设在V8的阵列上没有forEach方法(ECMAScript第5版标准的一部分).你不必投掷一个大的“V8对JSC”杠杆,而是:
if (typeof Array.prototype.forEach === "function") { // Code that expects `forEach` } else { // Code that falls back }
(您的“后退代码”可能会添加到原型中,或者也许这个测试在您自己的迭代器函数中,并且您想知道是否推迟本机实现或提供自己的实现.)
对于您想要使用的其他功能,也可能存在或可能不存在.
但是,如果您真的需要检测V8与JSC(并且您的评论似乎是可能的话),那么this page似乎表现出一种这样做的手段,尽管它似乎非常脆弱.这是我稍作修改的版本(最重要的是用Webkit Appearance测试来替换window.devicePixelRatio – 前者在至少一些其他浏览器上使用了错误的假设[例如,使用Gecko而不是WebKit的Firefox]):
var v8string = 'function%20javaEnabled%28%29%20%7B%20%5Bnative%20code%5D%20%7D'; if ('WebkitAppearance' in document.documentElement.style) //If (probably) WebKit browser { if (escape(navigator.javaEnabled.toString()) === v8string) { display('V8 detected'); } else { display('JSC detected'); } } else { display("Not a WebKit browser"); }
可以检测Chrome(也使用V8)和Safari(也使用JSC)之间的区别.
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。