2016-05-23 12 views
8

Tôi đã tìm kiếm giờ về vấn đề này, nhưng tôi vẫn không thể tìm thấy bất kỳ giải pháp nào cho vấn đề này.CORS + Cordova: vấn đề với: Access-Control-Allow-Origin

Tôi developping một cordova App (basicely HTML/JS) Vì vậy: các ứng dụng chạy trên điện thoại di động từ các hoa tiêu, và tôi gặp khó khăn khi đưa ra một yêu cầu ajax đến một API: https://developer.riotgames.com/ Nhưng chúng ta hãy nói rằng tôi chỉ muốn lấy trang google.

Làm thế nào để tôi làm điều đó, điều này có thể thực hiện được không? Dưới đây là một ví dụ đơn giản:

$.ajax({ 
    type: "GET", 
    url: "https://google.com", 
    dataType: "text", 
    success: function(response){ 
     alert("!!!"); 
    }, 
    error: function(error){ 
     alert("..."); 
    } 
}); 

Tôi nhận được lỗi tương tự một lần nữa và một lần nữa:

XMLHttpRequest cannot load https://google.com/ . No 'Access-Control-Allow-Origin' header is present on the requested resource. Origin 'null' is therefore not allowed access

Nguồn gốc 'null' là bởi vì tôi chạy mã từ: file:///D:/Projets/LoL/www/index.html và tôi đọc mà navigator đang chặn, nhưng nó không hoạt động tốt nếu tôi vô hiệu hóa bảo mật với --disable-web-security Và tất nhiên, tôi không có quyền truy cập vào máy chủ mà tôi muốn tham gia.

Cảm ơn rất nhiều sự giúp đỡ của bạn!

+1

có thể trùng lặp của [XMLHttpRequest lỗi: Xuất xứ rỗng không được phép bởi Access-Control-Allow-Origin] (http://stackoverflow.com/questions/3595515/xmlhttprequest-error-origin-null- không được phép-by-access-control-allow-origin). Tôi khuyên bạn nên làm một số đọc trên JSONP nhưng nói chung nếu bạn không thể sửa đổi máy chủ, không có cách nào tốt để làm những gì bạn muốn làm. – CollinD

Trả lời

9

Bạn cần plugin danh sách trắng Cordova: https://cordova.apache.org/docs/en/latest/reference/cordova-plugin-whitelist/.

Có này trong config.xml:

<access origin="*" /> 
<allow-navigation href="*"/> 

Và có meta Content-An ninh-Chính sách trong index.html. Một cái gì đó như:

<meta http-equiv="Content-Security-Policy" content="default-src *; script-src 'self' 'unsafe-inline'; style-src 'self' 'unsafe-inline'; media-src *; img-src 'self' data:"> 
+2

Nó không hoạt động cho tôi khi tôi chạy như trình duyệt. Tôi vẫn có: "Yêu cầu liên kết gốc bị chặn: Chính sách xuất xứ giống nhau không cho phép đọc tài nguyên từ xa tại http: // localhost: 7788/testAction. Điều này có thể được khắc phục bằng cách di chuyển tài nguyên đến cùng tên miền hoặc bật CORS. – Emiter

+0

Nếu bạn triển khai một chiếc điện thoại, bạn có thể có kết quả tốt hơn Tôi đã đọc (rất tiếc là tôi không thể nhớ lại ở đâu) rằng các câu trả lời của CORS hơi khác một chút khi chạy từ ứng dụng hoặc trình duyệt. chỉ hoạt động khi tôi triển khai nó vào điện thoại của mình - không phải từ máy tính để bàn của tôi. – nmcilree

0

Tôi đã thêm sau trong máy chủ nodjs giải quyết được vấn đề của mình;

app.use(function(req, res, next) { 
res.header("Access-Control-Allow-Origin", "*"); 
res.header("Access-Control-Allow-Headers", "Origin, X-Requested-With, Content-Type, Accept"); 
next(); 

});

Điều này có thể hữu ích nếu bạn đang sử dụng nút lệnh.

Cảm ơn