2011-03-17 92 views
7

我一直在爭論這個問題已超過48小時,我一直無法在網上找到答案。設置如下:Android Webview HTML加載Javascript問題

我的Android應用程序在第一次運行時(內容超過20MB)正在下載內容,並將文件解壓縮到用戶的SD卡上/ mnt/sdcard/{my package} /文件夾中。內容包括HTML文件,CSS文件,JS文件和圖像。下面是什麼寫入SD卡(其中/ =到/ mnt/SD卡/ {我的包} /文件夾/)的完整結構:

/內容/

a.html 
b.html 
images/ 
    image1.jpg 

/CSS/

c.css 
d.css 

/JS/

e.js 
f.js 

這裏是我的代碼加載從SD卡中的HTML文件:

webView = (WebView) findViewById(R.id.pageBrowser); 
    webView.getSettings().setJavaScriptEnabled(true); 
    webView.addJavascriptInterface(new LinkHandlerInterface(), "Android"); 
    webView.setWebViewClient(new PageWebViewClient()); 

    // contentLocation + url is equal to the full path to the html file 
    webView.loadUrl("file://" + contentLocation + url); 

此代碼成功加載HTML頁面。沒問題。每頁有以下頭標籤:

<link rel="stylesheet" type="text/css" href="../css/screen.css" media="all" /> 
    <link rel="stylesheet" type="text/css" href="../css/inPractice.css" media="all" /> 
    <link rel="stylesheet" type="text/css" href="../css/inPracticeScheme.css" media="all" /> 
    <link rel="stylesheet" type="text/css" href="../css/mobile/iPad.css" media="all" /> 
    <script type="text/javascript" src="../js/jquery-1.3.2.min.js"></script> 
    <script type="text/javascript" src="../js/inPractice-utilities.js"></script> 
    <script type="text/javascript" src="../js/inPractice.js"></script> 
    <script type="text/javascript" src="../js/mobile/inpractice.ipad.js"></script> 

這裏是問題所在。我的WebView呈現HTML就好了。它甚至可以完美地加載和應用CSS。但是,它拒絕加載和執行Javascript。如果你從上面記得,js文件夾實際上是一個從html文件開始的文件,所以它指向了正確的位置。

這裏是我所知道的一個列表:

  • 我使用的CSS被應用罰款,所以我知道這個問題是不是與文件位置。

  • 我之前使用過這個相同的代碼,但是從我的應用程序的資產文件夾(文件:/// android_assets/...)加載文件,它的工作完美。由於內容太大,我無法將其與我的應用程序捆綁在一起,因此轉移到了SD卡。

  • 如果我以一種腳本標記內列出的所有JavaScript方法來更改HTML文件,它將正常工作。我無法控制HTML,因此我無法永久應用此更改。這告訴我WebView沒有執行Javascript的問題。

  • 圖像加載正常。

我現在很新鮮。有沒有人有任何線索爲什麼我的WebView無法加載我的Javascript文件?有沒有人見過這個?

編輯:這裏是JS文件我試圖使用可以在這裏查看:

http://www.automatastudios.com/clients/cco/inpractice/css/inPractice.css http://www.automatastudios.com/clients/cco/inpractice/css/inPracticeScheme.css http://www.automatastudios.com/clients/cco/inpractice/css/screen.css http://www.automatastudios.com/clients/cco/inpractice/css/mobile/iPad.css

  • 注意:這些CSS文件不是由我創作的。
+1

我不知道這可能最終成爲了一個問題, Android不允許來自SD卡的JS在WebView中執行? – Keenan 2011-03-18 16:39:44

回答

3

永遠無法找到解決方案。

我結束了剛剛編輯的HTML文件,例如,將Javascript源文件更改爲內嵌Javascript。這有效(正如我預期的那樣)。

0

來加載HTML中引用JS,CSS是使用

webView.loadDataWithBaseURL() 

我們需要通過在HTML,JS,CSS在文件系統上找到位置的根目錄下的首選方式作爲baseURL。這裏需要注意的是,我們只需要使用「文件」方案URL。

在你的情況的代碼應該是

String html = readFileAsString(
     new FileInputStream("file://" + contentLocation + url)); 
webView.loadDataWithBaseURL("file://" + contentLocation,html,"text/html","utf-8",null); 


public static StringBuffer streamToString(InputStream stream){ 

     StringBuffer fileContent = new StringBuffer(""); 
     try { 

      int size = stream.available(); 
      byte[] buffer = new byte[size]; 
      int length; 
      while ((length = stream.read(buffer)) != -1) { 
       fileContent.append(new String(buffer)); 
      } 
      stream.close(); 
     } catch (IOException e) { 
      // TODO Auto-generated catch block 
      e.printStackTrace(); 
      try { 
       stream.close(); 
      } catch (IOException e1) { 
       // TODO Auto-generated catch block 
       e1.printStackTrace(); 
      } 
     } 

     return fileContent; 
    } 

希望的答案有助於未來的遊客

PS: 上面的代碼片段不編譯

相關問題