2014-09-11 3 views
0

У меня есть проект Android Webview, которому необходимо получить доступ к некоторым функциям Javascript. Я настроил все по учебнику this. И все работает, я могу загрузить html из приложения Android, можно вызвать методы класса Android из Javascript в соответствии с методом, описанным в учебнике.Вызов функции Javascript с Android

Есть одна вещь, с которой я не могу работать, и это вызов функции Javascript из Java-класса в Android. Функция Javascript просто печатает сообщение журнала для теста.

В наш индекс.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 

Как вы заметили, я создал 2 Foo функции в Javascript файлов и они размещены по-разному. Вызов foo1() работает, но вызов Foo() показывает эта ошибка в LogCat:

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

Я подозреваю, что это потому, что Foo() внутри анонимной функции.

Может ли кто-нибудь показать мне, как я могу позвонить foo() из Android?

Спасибо.

ответ

1

foo и foo1 функции имеют разный объем. Вот почему foo не доступен. Для того, чтобы позвонить по телефону foo, вы можете добавить эту функцию в Окно объект. Смотри ниже:

(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.

+0

Да, это исправлено. Благодарю. – kaushal