首页 > 解决方案 > 检测 javascriptinterface 方法是否存在

问题描述

我有一个 Android 项目,它已经在 Play 商店中并安装在许多设备上。在我以前的版本中,java 中没有任何方法可以检查从 javascript 调用的应用程序的版本。

然后我开发了一个新版本的应用程序并添加了一个 javascriptinterface 函数来返回安装的应用程序的版本。现在,如果他们的设备上安装了旧版本,我希望我的客户更新应用程序。

因为旧应用程序中不存在该 javascriptinterface 函数,所以当我为旧应用程序调用该方法时,它不会做任何事情,因为旧应用程序中不存在该方法。它在新应用程序中运行良好。

我的问题是:有没有办法从甚至没有定义该方法的旧应用程序版本中检测 javascriptinterface 函数是否存在???

标签: javascriptandroidandroid-webview

解决方案


如果我做对了,那么在您的新版本中,java 会为 javascript 引擎添加一个新方法,从而window.getAppVersion()产生当前版本(假设方法名称确实是»getAppVersion«)。

要检查该方法是否存在于 Javascript 中某个范围(window在这种情况下),您可以执行以下操作:

if ('getAppVersion' in window) { … }

所以你可以在脚本的开头添加类似的东西:

if (!('getAppVersion' in window)) {
  window.getAppVersion = function () {
    //really old verion
    return -Infinity;
  }
}

这样,只有在函数不存在时才创建函数。


推荐阅读