Вызовите функцию jQuery в Android WebView из Java? - PullRequest
2 голосов
/ 17 января 2012

Я пытаюсь вызвать функцию javascript, которая определена в html, как

WebView.loadUrl("javascript:hoge()");

Я могу вызвать функцию не-jQuery, но я не могу вызвать функцию, которую я определил внутри документа '$ () .ready (function () {}) (jQuery); ', как показано ниже.

<script>
//I can call this function by webview.loadUrl("javascript:something()");
function something(){
    //do something
}

$(document).ready(function(){
    //but I can't call this function by webview.loadUrl("javascript:hoge()");
    function hoge(){
        //do something.
    }
})(jQuery);
</script>

Есть ли способ вызвать hoge () из Java, как обычная функция javascript?

Я обнаружил, что могу использовать jQuery Selector, даже если функция не находится внутри '$ (document) .ready (function () {}) (jQuery);', но я также обнаружил, что с помощью этого обходного пути,Я не могу использовать дополнительную библиотеку jQuery.

- это действительный код колокольчика.

https://github.com/YoshimuraSei/AndrOutliner/tree/master/Outliner

и это HTML-файл https://github.com/YoshimuraSei/AndrOutliner/blob/master/Outliner/assets/www/treeview.html

и это код Java, который я пытаюсь вызвать функцию JavaScript.https://github.com/YoshimuraSei/AndrOutliner/blob/master/Outliner/src/com/yslibrary/android/outliner/TreeViewFragment.java

в строке 100 я пытаюсь вызвать функцию javascript'test1 () '(см. Строку 34 html-файла), и ее можно вызывать, поскольку в настоящее время она не находится внутри $ (документ).ready (function () {}) (jQuery); ', но я не могу вызвать дополнительный метод библиотеки jQuery' nestedSortable () 'из test1 ().

Как я могу решить эту проблему?

Редактировать:
Или это просто время загрузки библиотеки jQuery и плагинов?
Я получил эти ошибки после загрузки html в webview.

Uncaught TypeError: Cannot read property 'mouse' of undefined--From line 7 of file:///android_asset/www/js/jquery.ui.mouse.touch.js
Uncaught TypeError: Cannot read property 'sortable' of undefined--From line 15 of file:///android_asset/www/js/jquery.ui.nestedSortable.js

'mouse' и 'sortable' - это свойства jquery.ui, которые должны быть загружены до загрузки этих двух файлов, поэтому я предполагаю, что порядок загрузки немного странный.есть идеи?

Ответы [ 3 ]

1 голос
/ 08 февраля 2014

Я сейчас работаю инженером JavaScript. Из этого опыта теперь я вижу, что было не так. Это проблема, связанная с областью действия и временем.
Функции внутри $(document).ready(function(){}); нельзя вызывать извне, поскольку они не являются глобальными. если вы хотите позвонить им извне, вы должны сделать это глобальным. И вам нужно подождать, пока javascript не будет полностью загружен и готов к использованию.

$(document).ready(function(){
    // make it global function
    window.foo = function(){
        //do something.
    }

    // call java method that notifies java that js is ready to use.
    // (you should implement JavascriptInterface class & method)
    window.JsInterface.jsReady();
})(jQuery);
  1. Вы должны выставить функции для Global .
  2. вам нужно подождать, пока javascript не будет готов.
0 голосов
/ 26 марта 2012

ну, вы всегда можете вызвать функцию javascript, используя метод loadUrl вашего веб-просмотра;

myWebView.loadUrl("Javascript: alert('test');");
0 голосов
/ 17 января 2012

Что вы можете сделать, это передать параметр строки запроса при вызове веб-просмотра (например, method = hoge).

Затем в своем javascript вы можете проверить наличие параметра и запустить метод hoge() соответственно

Не уверен, если вы заинтересованы, но вы также можете вызвать свой java-код для Android из javascript с помощью интерфейса javascript для Android, см. http://developer.android.com/guide/webapps/webview.html

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...