2013-06-20 37 views
4

工作的Android的WebView我试图用的JavaScript不是loadDataWithBaseUrl

webview.loadDataWithBaseURL("", htmlcontent, "text/html", null, ""); 

的方法从StringBuilder其中填充HTML数据返回htmlContent将数据加载到机器人的WebView。

我已经启用JavaScript和设置webChromeClient如下

webview.getSettings().setJavaScriptEnabled(true); 
webview.setWebChromeClient(new WebChromeClient()); 
webview.addJavascriptInterface(new JSClass(), "Android"); 

我界面的javascript:

class JSClass { 
    public void getHTMLContent(String html) 
    { 
     Log.i(Global.TAG, "HTMLContentReceived: "+html); 
    } 
} 

和我的html页面的javascript:

<script type="text/javascript"> 
    var ele = document.getElementsByClassName('test'); 
    for(var i=0;i<ele.length;i++){ 
     ele[i].onclick = function(){ 
      window.Android.getHTMLContent(this.innerHTML); 
     } 
    } 
</script> 

但不知何故的JavaScript没有返回任何价值。 它正常工作与loadData(URL),其中URL是资产的文件夹一个简单的网页

请帮助 在此先感谢

+0

更正了! 只需在您的活动中使用 webview.loadUrl(“javascript:// your javascript goes here”); webview.getSettings()。setJavaScriptEnabled(true);上面代码中的 ,它工作顺利! 希望它有帮助 – raghavendra

回答

1

您没有任何对基本URL使用,因为你装载产生的动力HTML。 由于这个原因webview.loadData(htmlcontent, "text/html", null);应该是绰绰有余。

的Javascript不要扔在Java代码中任何异常。请记住,JS不像Java代码那样是类型安全的/严格的...我的做法是在敏感的Javascript调用之间放置日志以查看该行是否通过并检查值。既然你没有提供的HTML,我会建立了WebChomeClient并覆盖onConsoleMessage

webview.setWebChromeClient(new MyChromeClient()); 

private class MyChromeClient extends WebChromeClient { 
     @Override 
     public boolean onConsoleMessage(ConsoleMessage consoleMessage) { 
      String message = consoleMessage.message() + " -- line " + consoleMessage.lineNumber(); 
      switch (consoleMessage.messageLevel()) { 
      case ERROR: 
       logErrorMessage(message); 
       break; 
      default: 
       logInfoMessage(message); 
       break; 
      } 
      return true; 
     } 

     private void logInfoMessage(String message) { 
      Log.i("JSTag", message); 
     } 

     private void logErrorMessage(String message) { 
      Log.e("JSTag", message); 
     } 


    } 

从你的JavaScript,你会再调用,例如:console.log('check my value:' + (ele != null))。有关此信息here。在你的JavaScript代码

来看,我不明白什么点this.innerHTML

+0

谢谢你gunar的反馈意见。我已经解决了这个问题,现在我的webview响应用户点击。我面临的问题是,当用户点击任何一行时,我加载了一个包含表n的页面,我调用一个意图,根据该行中的某些单元格数据加载一些图像。它在第一次点击时工作顺利,但应用程序关闭时不会在第二次点击时发生任何错误。我不明白y.Is是因为图像消耗的内存(每个图像大约为2MB,而当用户点击一行时,只有大约200kb的拇指)?我如何解决dis? – raghavendra

+0

作为第一条评论:每个StackOverflow(SO)问题应该足够具体。一旦你问了一些问题,如果你为这个问题收到的答案是好的,你继续前进。对于你目前的问题,我会打开另一个线程。但是,自从你开始使用它之后,考虑到它将会被解压缩,一张200kb的图像在内存中会占用大约三个时间。我相信你应该重新考虑你的应用在做什么的策略。如果你可以在新的SO问题中陈述你的实际问题,也许你可以得到更多的帮助。 – gunar

+0

谢谢你gunar的反馈 – raghavendra

相关问题