gpt4 book ai didi

javascript - 如何检测在 Android 运行时使用的是哪个 javascript 引擎(v8 或 JSC)?

转载 作者:塔克拉玛干 更新时间:2023-11-01 21:34:38 29 4
gpt4 key购买 nike

较新版本的 Android ( > 2.2) 包括 v8 javascript 引擎,而旧版本只有 JSC。然而,根据http://blogs.nitobi.com/joe/2011/01/14/android-your-js-engine-is-not-always-v8/ , 在运行时使用哪个 javascript 引擎似乎取决于构建时存在的环境变量 (JS_ENGINE),以及设备的硬件规范:

# 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

基本上,可能是 JSC 中的 javascript-to-java 桥在 Android 2.3.X 上损坏了,这会影响我尝试编写的应用程序。我在我的模拟器上的 JNI 深处的某个地方看到了段错误,但在我测试过的少数物理设备上却没有。我正在尝试确定这是仅模拟器、仅 JSC 还是完全不同的东西。

最佳答案

我认为更好的问题是:你为什么关心?你基本上落入了很多人在 90 年代末/00 年代初落入的“浏览器检测”陷阱。不过,从那时起,我们了解到功能检测是更有用的方法,尤其是因为给定浏览器支持的功能(大部分)是一个移动目标。现在有一些代码在 IE9 上运行,具有显着改进的 DOM 和 JavaScript 支持,但没有使用这些功能,因为它正在执行浏览器检测并回退到 IE6 技术。

因此,与其担心 V8 与 JSC 的区别,不如担心您想要的功能。我对 JSC 一无所知,但例如,假设它在 V8 所具有的数组上没有 forEach 方法(ECMAScript 第 5 版标准的一部分)。与其抛出一个大的“V8 vs. JSC”杠杆,不如:

if (typeof Array.prototype.forEach === "function") {
// Code that expects `forEach`
}
else {
// Code that falls back
}

(您的“后退代码”可能添加 forEach 到原型(prototype),或者这个测试可能在您自己的迭代器函数中并且您想知道是否推迟本地实现或提供您自己的实现。)

类似地,对于您想要使用的其他可能存在或可能不存在的功能。


但如果您真的需要检测 V8 与 JSC(从您的评论看来您可能会),this page似乎展示了一种这样做的方法,尽管它看起来非常脆弱。这是我略微编辑过的版本(尤其是将 window.devicePixelRatio 替换为 WebkitAppearance 测试)——前者至少在其他一些浏览器上给出了误报 [例如 Firefox , 它使用 Gecko,而不是 WebKit]):

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) {
console.log('V8 detected');
} else {
console.log('JSC detected');
}
} else {
console.log("Not a WebKit browser");
}

帮我检测 Chrome(也使用 V8)和 Safari(也使用 JSC)之间的区别。

关于javascript - 如何检测在 Android 运行时使用的是哪个 javascript 引擎(v8 或 JSC)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6768474/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com