8

Tôi muốn vô hiệu chính sách gốc tương tự trên XMLHttpRequests trong các WebView được nhúng của riêng tôi. Tôi có quyền kiểm soát các trang được nạp/mã đang được thực hiện trong WebView, vì vậy tôi không quan tâm đến việc thực thi chính sách gốc giống nhau. Tôi muốn thực hiện các yêu cầu miền chéo.Vô hiệu hóa Chính sách gốc tương tự/tạo XMLHttpRequests miền chéo trong WebKit WebViews?

Tôi đã thử triển khai WebPolicyDelegate và WebResourceLoadDelegate nhưng dường như chúng không được gọi cho XMLHttpRequests.

+1

Bạn dường như đã tìm ra câu trả lời, bạn có thể vui lòng chia sẻ nó là cái gì? Tôi đang nhúng WebView trong chương trình Cocoa của tôi như vậy: - (void) applicationDidFinishLaunching: (NSNotification *) aNotification { \t NSView * contentView = [window contentView]; \t WebView * webView = [[Phân bổ WebView] initWithFrame: contentView.frame]; \t webView.autoresizingMask = NSViewWidthSizable | NSViewHeightSizable; \t [contentView addSubview: webView]; \t [[webView mainFrame] loadRequest: [NSURLYêu cầu yêu cầuWithURL: [URL NSNVới chuỗi: @ "http://www.google.com"]]]; } – DenNukem

Trả lời

1
void WebSettingsImpl::setWebSecurityEnabled(bool enabled) 
{ 
    m_settings->setWebSecurityEnabled(enabled); 
} 

Hy vọng rằng đây là những gì bạn cần! Bạn có thể gửi cho tôi một tin nhắn cho webkit.

1

Tôi nghĩ bạn sẽ gặp khó khăn trong việc tìm cách để làm điều đó theo cách hữu ích cho bạn. Bạn đã xem xét JSONP thay vì XHR chưa? http://en.wikipedia.org/wiki/JSON

Tổng quan cấp cao là JSONP sử dụng cơ chế tương tự để yêu cầu tập lệnh bên ngoài như bạn đang sử dụng ở trên. Sự khác biệt là máy chủ của bạn sẽ nhận ra điều này và sẽ đóng gói phản hồi JSON làm đối số cho phương thức gọi lại. Khi trang web của bạn nhận được 'tập lệnh' này, nó thực thi nó, từ đó trả lại dữ liệu trực tiếp vào phương thức gọi lại của bạn.

Nếu bạn có thể sử dụng một khung công tác như jQuery, hầu hết phía máy khách sẽ được xử lý minh bạch cho bạn. Thực tế, nó sẽ sử dụng hầu như các phương thức mà bạn sử dụng cho các yêu cầu XHR (AJAX). Hãy khám phá tại đây: http://api.jquery.com/jQuery.getJSON/

+0

Tôi rất quen thuộc với JSONP nhưng đó không phải là những gì tôi đang tìm kiếm. Tôi đơn giản muốn vô hiệu hóa SOP trong môi trường được kiểm soát nơi tôi đang nhúng một WebView. Tôi không nói về việc vô hiệu hóa SOP trong các trình duyệt web thông thường vì tôi biết rằng không thể (vì lý do chính đáng) – tlrobinson

0

Bạn có thể thử thêm tiêu đề Access-Control-Allow-Origin: * vào phản hồi của máy chủ. Tôi không nghĩ rằng nó được hỗ trợ bởi tất cả các trình duyệt mặc dù. Thông tin

thêm: https://developer.mozilla.org/en/HTTP_access_control

0

Tôi đang tìm cách thực hiện điều này trên OSX. Hóa ra là WebPreferences có phương thức riêng: setWebSecurityEnabled. Đặt điều này thành false và nó sẽ hoạt động.

http://trac.webkit.org/browser/trunk/Source/WebKit/mac/WebView/WebPreferences.mm?rev=111350#L1011

Vì vậy, ví dụ:

NSString* noSecurityPreferencesId = @"noSecurity"; 
WebPreferences* prefs = [[WebPreferences alloc] initWithIdentifier: noSecurityPreferencesId]; 
[prefs setWebSecurityEnabled: false]; 
[webView setPreferencesIdentifier: noSecurityPreferencesId]; 
Các vấn đề liên quan