2016-05-10 19 views
11

Tôi có ứng dụng trình bao bọc đơn giản Cordova trỏ đến trang web bên ngoài mà không xác định bất kỳ chế độ xem nào.Ứng dụng Cordova Wrapper Nơi tải liên kết nội bộ Trong ứng dụng, Liên kết ngoài Tải trong trình duyệt

Tôi muốn tất cả các liên kết nội bộ từ miền đó được nạp bên trong ứng dụng, nhưng tất cả các liên kết bên ngoài (http://twitter.com, vv) phải được nạp trong trình duyệt hệ thống, vì vậy các trang có Back/Forward chức năng.

Trong ứng dụng bình thường có chế độ xem, tôi có thể đặt target='_system' để tải liên kết trong trình duyệt mặc định hoặc sử dụng các liên kết mở một cách rõ ràng trong chế độ xem trình duyệt web. Thật không may trong trường hợp này tôi không có khả năng chỉnh sửa mã phía máy chủ, vì vậy cần một giải pháp hoạt động trong ứng dụng.

Nếu tôi xác định config.xml như vậy, thì cả liên kết nội bộ và bên ngoài đều được tải trong ứng dụng.

<content src="http://example.com/" /> 
<access origin="*" /> 
<allow-navigation href="*" /> 

Nếu tôi xác định config.xml với allow-intent, sau đó liên kết nội bộ và bên ngoài được mở ra trong trình duyệt hệ thống.

<content src="http://example.com/" /> 
<access origin="*" /> 
<allow-navigation href="*" /> 
<allow-intent href="http://*/*" /> 
<allow-intent href="https://*/*" /> 

Otherssuggested sử dụng tùy chỉnh javascript để ghi đè lên target-_system, tuy nhiên kể từ khi tôi không có quan điểm riêng của tôi, tôi thực sự không thể làm điều đó.

Có thể xác định allow-intent cho cordova-plugin-whitelist theo cách như vậy để bao gồm tất cả các URL không phải là tên miền nội bộ?

Hoặc tôi sẽ cần phải bằng cách nào đó ghi đè shouldStartLoadWithRequest trong MainViewController và sau đó gọi [[UIApplication sharedApplication] openURL:url]?

Trả lời

7

Ok, sau khi một số thử nghiệm và đề xuất từ ​​Hayyaan, tôi đã có thể đưa ra kết hợp allow-navigationallow-intent phục vụ mục đích của tôi.

<content src="https://example.com/" /> 
<access origin="*" /> 
<allow-navigation href="about:*" /> 
<allow-navigation href="https://example.com/*" /> 
<allow-navigation href="https://*.example.com/*" /> 
<allow-navigation href="https://*.facebook.com/*" /> 
<allow-intent href="http://*/*" /> 
<allow-intent href="https://*/*" /> 

Bây giờ tất cả các liên kết nội bộ từ miền trang web được nạp trong ứng dụng, trong khi liên kết bên ngoài được nạp trong trình duyệt hệ thống.

Lưu ý, tôi đã bao gồm <allow-navigation href="https://*.facebook.com/*" /> để cho phép tải thư viện Facebook nếu không tôi đã nhận được lỗi.

ERROR Internal navigation rejected - 
<allow-navigation> not set for url='https://staticxx.facebook.com/connect/xd_arbiter.php? 

Và cũng bao gồm <allow-navigation href="about:*" /> để tránh lỗi cho about:blank.

ERROR Internal navigation rejected - <allow-navigation> not set for url='about:blank' 

Hy vọng rằng đây sẽ giúp người khác với cùng một vấn đề :)

+0

làm thế nào để bạn đạt được điều này? Một số abc.example.com để được điều hướng trong webview và xyz.example.com trong trình duyệt bên ngoài ! – NitZRobotKoder

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