【问题标题】:Javascript namespaces in Android JavascriptInterfaceAndroid JavascriptInterface 中的 Javascript 命名空间
【发布时间】:2014-03-26 13:43:01
【问题描述】:

我正在为我的应用程序创建一个 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 那么它就可以正常工作。

【问题讨论】:

    标签: android


    【解决方案1】:

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

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

    【讨论】:

      【解决方案2】:

      我正在查看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。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2010-12-05
        • 2011-12-02
        • 2011-03-25
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多