2016-09-14 17 views
10

Tôi đã vật lộn với việc thực hiện cuộc gọi đến cửa sổ đang mở, sử dụng trình ứng dụng inappbrowser từ bên trong ứng dụng của tôi. Về cơ bản, tôi đang sử dụng phonegap làm trình bao bọc để tải lên trang web CMS trên da di động với các tính năng ứng dụng đặc biệt.Phonegap Build CLI-5.2.0 Tải xuống và Đóng Trong Ứng dụng Web

Đây là index.html. Tôi đang sử dụng inappbrowser (với vị trí được đặt thành không).

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 
<html xmlns="http://www.w3.org/1999/xhtml" > 
<head> 
    <title>Emerald Test App</title> 
    <meta name="apple-mobile-web-app-capable" content="yes" /> 
    <meta name="viewport" content="width=device-width" /> 
    <script src="phonegap.js"></script> 

    <script type='text/javascript'> 
     var ref = null; 
     function onLoad() { 
     document.addEventListener("deviceready", onDeviceReady, false); 
     } 


    function onDeviceReady() { 

     var url = 'https://my-cms-site.com/content.aspx?page_id=31&org_id=1&app=1'; 
     var target = '_blank'; 
     var options = "location=no" 
     ref = cordova.InAppBrowser.open(url, target, options); 

    } 

</script> 
</head> 


<body onload="onLoad()"> 
</body> 
</html> 

Những gì tôi đang tìm cách để làm, là liên kết mở trong một trình duyệt hệ thống - từ trang web bên ngoài của tôi nạp qua inappbrowser

Tôi đã thử download file sử dụng tài liệu tương tự và gợi ý từ bài viết như

<script type="text/javascript"> 
     window.open(url, '_system'); 
</script> 

Và _blank và thêm 'location = no' etc, nhưng không có súc sắc. Đây là những trang bên ngoài, được tải từ trang web từ xa của tôi.

Khi các liên kết này được nhấp, chúng sẽ mở trong cùng một trình duyệt (inappbrowser hoặc webview) và tiếp quản trình duyệt. Những gì tôi đang tìm kiếm là mở các trình duyệt này trong một trình duyệt hệ thống khác (chrome, safari, bất kỳ thứ gì). Điều này sẽ giải quyết vấn đề tải xuống của tôi (vì các tệp hy vọng sẽ mở ra trong trình duyệt hệ thống và người dùng có thể tìm ra việc cần làm với chúng).

Tôi đã cố gắng thêm trình xử lý sự kiện và executescript để trả về giá trị của href. Sau đó, sử dụng giá trị đó để window.open (href, '_ system'); từ index.html (thay vì trang từ xa). Bởi vì trên chỉ mục, tôi sẽ vẫn có tham chiếu đến inappbrowser.

ref.addEventListener("loadstop", function() { 
    ref.executeScript(
     { code: "var gbal = null; $('a').on('click', function() { gbal = $(this).attr('href'); }); (function runIt() { return gbal })();" }, 
     function(values) { 
      if (values != null) { 
      //alert(values[ 0 ]); 
      window.open(values[0],'_system'); 
      } 

     } 
     ); 
     }); 
    } 

Giá trị [0] luôn là rỗng. Điều này dường như cho thấy tôi không làm điều gì đó chính xác trong mã: phần của bản thực thi - hoặc $ (này) không thực sự là này

Vì vậy, câu hỏi lớn - làm cách nào để mở liên kết trong trang web bên ngoài của tôi trình duyệt hệ thống. window.open ('whatever.htm', '_XXXXX') không có sự khác biệt khi được gọi trên trang web từ xa của tôi. Tôi có đang đi đúng hướng bằng cách sử dụng trình xử lý sự kiện không?

Trả lời

2

Trả lời câu hỏi của riêng tôi ở đây để mọi người đối mặt với một tình huống tương tự có thể nhận được câu trả lời chắc chắn. Tôi đã ghép nối chúng lại với nhau từ các bài viết, tài liệu tham khảo và tài liệu khác.

Vì vậy, bạn muốn mở liên kết tới trình duyệt bên ngoài, trong một trang web được tải từ xa trong InAppBrowser?

Trên trang web từ xa, bạn cần bao gồm tập lệnh src vào tệp cordova.js, tệp cordova_plugins.js và bao gồm thư mục plugin của bạn. Các tệp này phải được lưu trữ trên trang web từ xa của bạn. Tôi đang chọn tải điều kiện của tôi nếu tôi biết đó là "ứng dụng". Các tập tin cordova khi nạp sẽ ném một loạt các cảnh báo, vì vậy bạn sẽ không muốn tải các thông báo này trừ khi bạn biết đó là ứng dụng.

enter image description here

Bạn lấy các tệp này ở đâu? Tôi đã cài đặt Phonegap Desktop và sử dụng các tệp từ bản dựng nhưng có một số lỗi tham chiếu. Thay vào đó, tôi đã sử dụng Phonegap Build và trích xuất các tệp từ APK. Đổi tên appname.apk thành appname.apk.zip và trích xuất/sao chép các tệp js cần thiết vào máy chủ của tôi. * Có một số vấn đề với sự khác biệt nền tảng và tệp cordova.js sẽ cần phải được thay đổi và có điều kiện được tải cho iOS/Android.

Đây là những điều cần thiết để bạn có quyền xử lý đối với người inappbrowser (và trong trường hợp yêu cầu "đóng ứng dụng" của tôi - navigator).

Trên trang web từ xa (bên ngoài) của tôi (sau khi tôi đã tải cordova/plugins) bây giờ tôi có thể đóng ứng dụng bằng một cuộc gọi đơn giản tới navigator.app.exitApp();

Trong trang từ xa (bên ngoài) trang web của tôi nạp trong inappbrowser, tôi bây giờ có thể mở liên kết trong trang bên ngoài bằng cách làm một cái gì đó như thế này:

<a onclick="loadUrl('http://google.com'); return false;" href="#">Test link, don't click</a> 

<script type="text/javascript"> 
$('.closeapp').click(function() { 
navigator.app.exitApp(); //this only works on Android. iOS doesn't allow for programmatic exit 
}); 
function loadUrl(url){ 
    navigator.app.loadUrl(url, { openExternal:true }); 
    return false; 
} 
</script> 

tôi có kế hoạch sửa đổi chức năng loadURL hơi sử dụng jquery, được xử lý khi nhấp chuột và tìm một lớp học. Một cái gì đó như:

$('.downloadable').click(function() { 
var url = $(this).attr('href'); 
navigator.app.loadUrl(url, { openExternal:true }); 
}); 

Ở trên chỉ hoạt động cho Android. Đang thử cửa sổ vanilla.open ('http://www.whatever.com', '_system') không mở trình duyệt bên ngoài trong iOS từ trang web bên ngoài của tôi. Tôi nghĩ về việc sử dụng một ref = cordova.inappbrowser.open() từ bên trong trang web bên ngoài của tôi? Điều đó không hiệu quả. Ai có ý tưởng gì không?

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