webview使用 - webview android教學




Android Webview Javascript-參考腳本不工作 (3)

嘗試在這樣的源代碼路徑中的“lib”前面加一個前向空格 (因為這是一個相對調用,瀏覽器會為你完成http://domain/lib/jquery.min.js而不是http:/ /domain.comlib/jquery.min.js )。

更新 - 我相信AngularJS使用ng-src指令來包含外部來源:

<script ng-src="/lib/jquery.min.js"></script>
<script ng-src="/lib/angular.min.js"></script>
<script ng-src="/lib/angular-route.min.js"></script>
<script ng-src="/lib/bootstrap.min.js"></script>

或者你也可以自己完成路徑,如果你不需要這樣的代碼是動態的(這也是一個快速的測試,以確保一切正常工作):

<script ng-src="http://domain.com/lib/jquery.min.js"></script>
<script ng-src="http://domain.com/lib/angular.min.js"></script>
<script ng-src="http://domain.com/lib/angular-route.min.js"></script>
<script ng-src="http://domain.com/lib/bootstrap.min.js"></script>

在Android Studio 1.0.1 API 21上開發。以下是文件夾結構 -

它本質上是一個基於AngularJS的應用程序,我想包裝在一個webview容器中,並在Android上運行。

我的Android代碼是 -

 WebView myWebView = (WebView) findViewById(R.id.webview);
 WebSettings webSettings = myWebView.getSettings();
 webSettings.setJavaScriptEnabled(true);
 webSettings.setDomStorageEnabled(true);
 myWebView.setWebChromeClient(new WebChromeClient());

 String filePath = "file:///android_asset/www/index.html";
 myWebView.loadUrl(filePath);

在html中的引用都是相對的 -

<script src="lib/jquery.min.js"></script>
<script src="lib/angular.min.js"></script>
<script src="lib/angular-route.min.js"></script>
<script src="lib/bootstrap.min.js"></script>

但有趣的是,我搜索了大部分地方,我不知道我哪裡錯了。 我的參考根本不工作! 所以我不能訪問我的lib文件,我的腳本,我的CSS。 另外,如果我在webview中使用相同的Java代碼運行外部角網頁,它將完美運行!

任何幫助表示讚賞。

注意:請不要建議使用Cordova / PhoneGap。 這是一個項目要求本土化(我坦率地不明白為什麼,但我只是一個開發人員沒有發言權)。

在旁邊注意:我面對與iOS webview相同的問題。 參考不工作!

UPDATE

試了下面的東西:

試過loadDataWithBaseURL() ,不起作用。

嘗試了所有可能的路徑方案。 沒有工作。

從文件夾中刪除所有的腳本,並把它們放在根級別,並修改鏈接沒有路徑,只是文件名。 依然不起作用。 這太奇怪了。


我還沒有嘗試過,但將您的index.html頁面放入一個字符串,並將其作為數據傳遞​​。 baseUrl然後是http://domain.com

public void loadDataWithBaseURL (String baseUrl, String data, String mimeType, String encoding, String historyUrl)

Webview與本地和互聯網(互聯網和內聯網)資源。 你必須使用loadDataWithBaseURL,並且所有的interweb資源都必須是http://或者所有的文件訪問都必須是file://資源中的任何內容都必須用http://指定鏈接等來自網絡的內容不能是//i/image.jpg,他們必須是http://www.example.com/i/image.jpg 。 這是網絡或文件系統必須完全合格。

下面我在文件系統中使用一個本地目錄,通過傳入文件的完整路徑名(它可以獲得一個目錄)。html被放入一個字符串中。 因為我正在使用loadDataWithBaseURL我也可以訪問interweb時,它的前綴是http://

StringBuilder sb = new StringBuilder();
                sb.append("<html><body><div style=\"width:100%; text-align:center; font-size:large;\">");
                sb.append(kmlmo.markeroptions.getTitle());
                sb.append("</div>");

                sb.append("<a href = \"http://www.example.com/link.html\">mylink</a>");

                sb.append(kmlmo.markeroptions.getSnippet());
                sb.append("</body></html>");
                View v = getView();
                if (v != null) {
                    wv = (WebView) v.findViewById(R.id.webView1);
                    if (wv != null) {
                        String localPath = "file://" + kmlmo.path;
                        String temp = sb.toString();
                        wv.loadDataWithBaseURL(localPath, temp, "text/html",
                                "UTF-8", "");
                    }

經過大量的摸索,以及來自回答者的大量幫助,我的代碼中的罪魁禍首是base標籤。 我刪除它,也刪除了html5mode的東西。 所以,總結一下,我刪除了以下內容:

 <base href="/">  

$locationProvider.html5Mode(true);

一切開始工作。





webview