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

我试图调用jtml中定义的javascript函数

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

我可以调用非jQuery函数,但是我不能调用我在’$(document).ready(function(){})(jQuery);’中定义的函数,就像下面一样。

  //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);  

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

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

belllow是实际代码。

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 function’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的属性,应该在加载这两个文件之前加载,所以我假设加载顺序有点奇怪。 任何的想法?

您可以做的是在调用webview时传递查询字符串参数(例如,method = hoge)。

然后在你的javascript中你可以检查param的存在并相应地运行hoge()方法

不确定你是否感兴趣,但你也可以使用android javascript界面​​从javascript调用你的android java代码,请参阅http://developer.android.com/guide/webapps/webview.html

我目前是一名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公开function。
  2. 你必须等到javascript准备好了。

好吧,你总是可以使用webview的loadUrl方法调用javascript函数;

 myWebView.loadUrl("Javascript: alert('test');");