26

Tôi tải tệp html cục bộ (từ thư mục nội dung) vào ứng dụng WebView. Trong HTML, tôi chạy jQuery.getJSON (url). url là một máy chủ từ xa.WebView miền chéo Javascript từ tệp HTML cục bộ

Hành động này không thành công và tôi đoán vì một vấn đề gốc khác (tên miền chéo). Tôi chạy cùng một tập tin trên chrome và ở đó nó đặc biệt nói như vậy.

Có cách nào để cho phép WebView trong Android tải dữ liệu từ máy chủ từ xa lên tệp HTML được tải cục bộ không?

+1

Bạn đã thử thêm "& jsoncallback =?" hoặc "callback =?" vào URL của bạn? – Zakaria

+0

Bạn đã thử phương pháp ".ajax" thay vì "getJSON" chưa? với ".ajax", nếu bạn đặt trong các tùy chọn "data-type: jsonp", nó sẽ làm việc cho bạn! – Zakaria

+0

máy chủ từ xa có cần hỗ trợ cụ thể JSONP để hoạt động không? Tôi không phải là siêu quen thuộc với các quy tắc của webviews, họ có khác nhau từ các trình duyệt máy tính để bàn? – mattacular

Trả lời

0

Tôi tải một tập tin html địa phương (từ thư mục nội dung) để WebView ứng dụng

Lưu ý rằng bạn không thể nói như thế nào bạn đang làm điều này. Tôi sẽ đoán rằng đó là bởi một số loadUrl() trên một URL file:///android_asset.

Có cách nào để cho phép WebView trong Android tải dữ liệu từ máy chủ từ xa lên tệp HTML được tải cục bộ không?

Hãy thử sử dụng loadDataWithBaseURL() để tải nội dung, cung cấp URL trên máy chủ từ xa làm URL cơ sở.

0

Cuộc gọi Ajax sẽ không hoạt động từ hệ thống tệp cục bộ. Nhiều hơn nó sẽ trở thành tên miền chéo. Vì vậy, nó sẽ không hoạt động. Nó làm việc trong nhật thực, becuz bạn đã thử từ máy chủ cục bộ.

2

Đừng quên thêm quyền internet trong file manifest của bạn:

<uses-permission android:name="android.permission.INTERNET"/> 

Ngoài ra hãy chắc chắn rằng bạn đang sử dụng yêu cầu JSONP (? Đừng quên các & callback = như đã nêu ở trên)

50

Sáng hôm nay tôi tìm thấy giải pháp có vẻ như đang hoạt động.

Java phần

Khởi WebView của bạn:

WebView _webView = (WebView) this.findViewById(R.id.id_of_your_webview_in_layout); 

khôi phục cài đặt WebView:

WebSettings settings = _webView.getSettings(); 

bộ cài đặt sau:

settings.setJavaScriptEnabled(true); 
settings.setAllowFileAccessFromFileURLs(true); //Maybe you don't need this rule 
settings.setAllowUniversalAccessFromFileURLs(true); 

bây giờ bạn có thể tải của bạn tập tin html của bạn bằng cách tiêu chuẩn:

_webView.loadUrl("file:///android_asset/www/index.html"); 

Các Javascript phần

Tạo yêu cầu XHR bằng cách tiêu chuẩn

var xhr = new XMLHttpRequest(); 
xhr.open("get", "http://google.com", false); 
xhr.send(); 

In kết quả ở đâu đó

document.body.innerHTML = xhr.responseText 

THÔNG BÁO: Thủ tục này chỉ hoạt động trên mức API 16 hoặc cao hơn (Ít nhất là tài liệu nói rằng).

+2

Theo tài liệu cho setAllowFileAccessFromFileURLs và setAllowUniversalAccessFromFileURLs, chúng được đặt thành true cho ICS và cũ hơn. Bắt đầu từ Jellybean họ tắt nó đi. Nếu bạn đang cố gắng tải một tệp JS cục bộ từ một trang HTML cục bộ, thì bạn sẽ cần phải kích hoạt chúng. – Steven

+0

Nhận những điều sau đây: NETWORK_ERR: XMLHTTPRequest ngoại lệ 101 – Codebeat

+1

Hoàn hảo, hoạt động ok :) –

0

Giải pháp chúng tôi sử dụng là sử dụng Android để tải tệp cập nhật từ máy chủ, đặt chúng và ghi đè lên tệp trong thư mục web, sau đó duyệt qua.

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