Android JavascriptInterface中的Javascript命名空间

时间:2014-02-24 18:04:30

标签: android

我正在为我的应用程序创建一个javascript api,我想在我的javascript代码中使用命名空间。但是,我无法让它工作,也无法找到有关该问题的任何信息。

期望的功能:

HTML:

<script>
    Android.typeOne.methodName();
    Android.typeTwo.methodName();
</script>

Java代码:

webView.addJavascriptInterface(new TypeOneInterface(context), "Android.typeOne");
webView.addJavascriptInterface(new TypeTwoInterface(context), "Android.typeTwo");

然而,这永远不会有效,如果我删除.typeOne并且:Android.methodName然后工作正常。

2 个答案:

答案 0 :(得分:1)

我正在查看addJavascriptInterface的文档。它说The Java object's fields are not accessible.因为 typeOne 必须是导出的Java对象的属性,所以看起来你需要手动安排“命名空间”。也就是说,导出TypeOne并将其放在全局JavaScript Android对象中。

所以我猜你需要创建空对象,并根据需要将东西放入其中。

<script>
// after stuff has been "injected into the JS context of the main frame"

Android = {};
Android.typeOne = window.TypeOne; 

...和

webView.addJavascriptInterface(new TypeOneInterface(context), "TypeOne");

这个答案是猜测,我从未在WebView中使用过JavaScript。

答案 1 :(得分:0)

我认为javascript理解你在对象类型上调用了methodeName,它是对象Android的子对象。但是你没有任何名为Android或typeOne的对象。 javascript中的点用于父母和孩子之间的层次结构。

您应该尝试使用不带点的名称,或者以不同方式调用您的对象(可能是window [“Android.typeOne”]。methodName();