从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);
- 你必须向Global公开function。
- 你必须等到javascript准备好了。
好吧,你总是可以使用webview的loadUrl方法调用javascript函数;
myWebView.loadUrl("Javascript: alert('test');");
- 为什么WebChromeClient.onProgressChanged和jquery的$(document).ready()回调之间有明显的延迟?
- JS确认android webview中的框不起作用
- Cordova Ajax请求待定
- Android – Javascript:如何在webview中执行jquery
- 在上传不工作之前,Android webview中的图像预览
- 使用PhoneGap在Android上自动呼叫预定义号码
- Phonegap + Android 4.4:如何检测SoftKeyBoard何时隐藏?
- Cordova和jQuery中的错误“与服务器的连接不成功。”
- Phonegap / jQuery移动页面转换闪烁