2012-02-23 86 views
21

如何从资产文件夹(或任何本地资源)加载我的远程HTML页面上的JavaScript和图像?Android WebView资产中的JavaScript

+2

您应该将答案放入答案中,以便我们可以将此标记为已关闭。 – 2012-02-23 14:23:52

回答

35

答:含底座URL

private String readHtml(String remoteUrl) { 
    String out = ""; 
    BufferedReader in = null; 
    try { 
     URL url = new URL(remoteUrl); 
     in = new BufferedReader(new InputStreamReader(url.openStream())); 
     String str; 
     while ((str = in.readLine()) != null) { 
      out += str; 
     } 
    } catch (MalformedURLException e) { 
    } catch (IOException e) { 
    } finally { 
     if (in != null) { 
      try { 
       in.close(); 
      } catch (IOException e) { 
       e.printStackTrace(); 
      } 
     } 
    } 
    return out; 
} 


2.负载的WebView:
1.您必须将HTML加载到字符串

String html = readHtml("http://mydomain.com/my.html"); 
mWebView.loadDataWithBaseURL("file:///android_asset/", html, "text/html", "utf-8", ""); 

在你应该有这种特殊情况下您希望在页面上使用的所有.js文件位于项目的“资产”文件夹下的某个位置。例如:

/MyProject/assets/jquery.min.js 


3.在您的远程html页面,你必须加载驻留在你的应用程序一样的.js和.css文件:

<script src="file:///android_asset/jquery.min.js" type="text/javascript"></script> 

同样适用于所有其他地方如图像资源等的路径必须开始

file:///android_asset/ 

网页视图会先加载您所提供的字符串的原始HTML,然后选择.js文件,名为.css和其他本地资源,然后加载远程内容。

+4

为什么要用'loadDataWithBaseURL'设置基本路径时必须提供绝对路径?此外,它似乎在4.1+中突破。 :( – Maarten 2013-10-20 08:21:20

+0

这似乎工作在4.1+对我来说,迄今为止,我已经能够加载HTML的JavaScript,而不是硬编码到资产文件夹中的唯一方式。 – Chris 2014-02-20 05:38:20

+0

如果HTML已经是远程的,没有可能编辑程序应该识别这些文件并从* String中替换字符串html * – htafoya 2014-07-10 00:07:21

2

如果动态创建您的HTML,然后使用loadDataWithBaseURL确保任何本地资源,例如您的资产文件夹中的JavaScript在HTML中被称为file:///(我花费了几个小时的工作)

+0

可以请你详细告诉我如何在将html作为字符串后动态添加(file://)到.js的路径。 – Adi 2014-08-13 12:18:57