jquery - 从 Java 调用 Android 的 WebView 中的 jQuery 函数?

标签 jquery android android-webview

我正在尝试调用在 html 中定义的 javascript 函数 喜欢

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

我可以调用非 jQuery 函数,但我不能调用我在“$(document).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>

有没有办法像普通的 javascript 函数一样从 Java 调用 hoge() ?

我发现即使函数不在“$(document).ready(function(){})(jQuery);”中,我也可以使用 jQuery Selector,但我也发现通过该解决方法,我可以“不要使用额外的 jQuery 库。

下面是实际代码。

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

这是html文件 https://github.com/YoshimuraSei/AndrOutliner/blob/master/Outliner/assets/www/treeview.html

这是我试图调用 javascript 函数的 java 代码。 https://github.com/YoshimuraSei/AndrOutliner/blob/master/Outliner/src/com/yslibrary/android/outliner/TreeViewFragment.java

在第 100 行,我正在尝试调用 javascript 函数'test1()'(请参阅 html 文件的第 34 行),并且可以调用它,因为当前它不在 '$(document).ready(function() {})(jQuery);',但我无法从 test1() 调用额外的 jQuery 库方法'nestedSortable()'。

我该如何解决这个问题?

编辑:
或者这只是加载 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 的属性,应该在加载这两个文件之前加载它们,所以我假设加载顺序有点奇怪。 有什么想法吗?

最佳答案

我目前是一名 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. 您必须向全局公开函数。
  2. 您必须等到 javascript 准备就绪。

关于jquery - 从 Java 调用 Android 的 WebView 中的 jQuery 函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8893964/

相关文章:

android - 错误:null value in entry: mainDexListProguardOutputFile=null

Android - 拍摄照片

android - WebView远程站点和奖励视频

javascript - 解析日期选择器以显示事件日期

javascript - jQuery - 按属性值搜索并更改所有值

Android GPS 精度甚至不及内置 map 应用程序

android - Webview loadDataWithBaseURL 不显示 html android

android - 在Android v4.0 WebView中显示®注册商标符号?

php - onclick 重定向到存储在 php 变量中的 url

javascript - 正则表达式的 jQuery 变量设置