【问题标题】:Calling Javascript function from Android从 Android 调用 Javascript 函数
【发布时间】:2014-09-11 14:32:31
【问题描述】:

我有一个需要访问一些 Javascript 函数的 Android Webview 项目。我已经按照this 教程设置了所有内容。一切正常,我可以从 Android 应用程序加载 html,可以按照教程中描述的方法从 Javascript 调用 Android 类方法。

有一件事我无法完成,那就是从 Android 中的 Java 类调用 Javascript 函数。 Javascript 函数只是打印一条日志消息以供测试。

我的 index.html 包括 sample.js。这是 sample.js 文件:

(function () {
    'use strict';

    function init(event) {
       function foo(){
          console.log("javascript foo() function called from android");
       }
    }

    window.addEventListener('load', init, false);

}());

function foo1(){
   console.log("javascript foo1() function called from android");
}

并从 Java Webview 调用:

myWebView.loadUrl("javascript:foo1()"); //this works
myWebView.loadUrl("javascript:foo()");  //this gives error

如您所见,我在 Javascript 文件中创建了 2 个 foo 函数,它们的放置方式不同。调用 foo1() 有效,但调用 foo() 在 logcat 中显示此错误:

Uncaught ReferenceError: foo is not defined: Line 1 of file:///android_asset/index.html

我怀疑这是因为 foo() 在匿名函数内部。

谁能告诉我如何从 Android 调用 foo()?

谢谢。

【问题讨论】:

    标签: java javascript android webview


    【解决方案1】:

    foofoo1 函数的作用域不同。这就是 foo 不可用的原因。 为了能够调用 foo 您可以将此函数添加到 window 对象。见下文:

    (function () {
        'use strict';
    
        function init(event) {
           window.foo = function() {
              console.log("javascript foo() function called from android");
           }
        }
    
        window.addEventListener('load', init, false);
    
    }());
    
    function foo1(){
       console.log("javascript foo1() function called from android");
    }
    

    所以 foo 函数直接添加到窗口对象,它与 foo1 具有相同的范围。

    【讨论】:

    • 是的,解决了它。谢谢。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-08-03
    • 1970-01-01
    • 2012-05-10
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多