2012-01-31 21 views
5

tôi đặt file .html (trong đó bao gồm các .js liên kết web) trong assest, bây giờ tôi đang cố gắng để tải urlwebview để tải các tập tin html địa phương, trong đó có .js như <script src>

mWebView = (WebView) findViewById(R.id.webview); 
     mWebView.getSettings().setJavaScriptEnabled(true); 
     mWebView.getSettings().setPluginsEnabled(true); 
     mWebView.getSettings().setAllowFileAccess(true); 

     mWebView.loadUrl("file:///android_asset/anim1.html"); 

Ở đây tôi không thể phát tệp .js, chờ phản hồi tích cực.

+0

bản cảm ơn cho công việc chỉnh sửa của bạn. –

Trả lời

7

Trước hết, tôi nghĩ rằng bạn không thể truy cập vào các tệp HTML và JavaScript từ nội dung vì nội dung không thể (và không nên) được cập nhật khi ứng dụng đã được đóng gói và ký. Điều này có nghĩa là với HTML và JavaScript của bạn trong nội dung, bạn không thể cập nhật chúng. Cách tiếp cận để giải quyết vấn đề đó là lưu HTML và JavaScript vào bộ nhớ trong hoặc bộ nhớ ngoài và sử dụng nó từ đó. Thứ hai, nếu bạn sử dụng phương pháp đó tôi vừa giải thích, bạn không còn có thể sử dụng phương pháp WebView.loadUrl(), nhưng thay vào đó bạn sẽ cần phải sử dụng phương thức WebView.loadDataWithBaseUrl(). Như thế này:

webView.loadDataWithBaseURL("http://some_url/", "some_data", "text/html", "utf-8", null); 

Sau đó, "some_data" sẽ được thử tải dưới dạng trang HTML, như đã thấy trong this previous SO answer. Khi cố tải một tài nguyên JavaScript, như /scripts/lib.js, nó sẽ được giải quyết thành http://some_url/scripts/lib.js và WebView sẽ cố gắng tải tài nguyên đó. Tất nhiên nó không thể, và đó là lý do tại sao bạn (trong Java) sẽ cần phải mở rộng các lớp WebViewClient, và cung cấp một thực hiện cho các phương pháp shouldInterceptRequest(WebView wv, String url).

Khi bất kỳ tài nguyên nào được tìm nạp trong trang web, ´shouldInterceptRequest´ sẽ được gọi và giá trị trả về được sử dụng làm tài nguyên.

+0

cách cập nhật tệp nếu chúng tôi sử dụng bộ nhớ trong? – eugene

Các vấn đề liên quan