2009-03-09 34 views

Trả lời

1

Không, không phải từ trang web.

+0

Tôi nghĩ rằng tôi nhớ lại một cách mà các ứng dụng có thể kiểm tra điều này nhưng tôi có thể sai. –

+1

Cảm ơn câu trả lời nhanh. Theo như mã gốc, có thể thông qua openUrl: để kiểm tra, vì vậy tôi đã đọc ... chưa được kiểm tra –

+11

@Brent Royal-Gordon: Không. Ứng dụng iPhone gốc có thể kiểm tra bằng cách gọi ** canOpenURL: **. –

55

Không liền mạch. Nhưng có một cách tương tự để kiểm tra xem một cửa sổ bật lên có bị chặn hay không.

Khi bạn thử lược đồ URL không được hỗ trợ, Safari sẽ cảnh báo người dùng rằng họ không biết phải làm gì với nó và ở lại trên cùng một trang.

Vì vậy, nếu bạn đã gọi cho ứng dụng của mình một thời gian để kích hoạt, hãy nói 300 mili giây và sau đó thực hiện một việc khác để phản hồi sự không tồn tại của lược đồ.

Nó không phải là đẹp nhất nhưng nó hoạt động:

function startIThrown(){ 
    document.location = 'ithrown://restart'; 
    setTimeout(function(){ 
    if(confirm('You do not seem to have iThrown installed, do you want to go download it now?')){ 
     document.location = 'http://itunes.apple.com/WebObjects/MZStore.woa/wa/viewSoftware?id=293049283&mt=8&uo=6'; 
    } 
    }, 300); 
} 

<a href="#" onclick="startIThrown()">Restart iThrown</a> 
+0

workaround tốt đẹp :) –

+2

Đó là giá trị một thử, nhưng thực sự đây là kinda một giải pháp khó chịu. Hàm đó được gọi ngay cả khi lược đồ URL đi qua khi bạn quay lại trang. Vì vậy, người dùng sẽ nhận được thông báo bật lên bất kể điều gì. Hoặc là 1 hoặc 2, tùy thuộc vào việc thiết bị của anh có hỗ trợ chương trình hay không. – samvermette

+9

@samvermette Có giải pháp thay thế phức tạp. Nếu lược đồ url hoạt động, sau đó yêu cầu ứng dụng gửi xác nhận đến máy chủ của bạn. Sau đó, khi bạn quay lại ứng dụng, hãy ping máy chủ để xem ứng dụng đã được mở thành công chưa. Phức tạp, nhưng khả thi. – Amir

35

Đây là một giải pháp mà không hiển thị popup khi bạn trở về từ ứng dụng, nó giả sử bạn đã trải dài hơn 400 ms:

function startiThrown() { 
    document.location = appurl; 
    var time = (new Date()).getTime(); 
    setTimeout(function(){ 
     var now = (new Date()).getTime(); 

     if((now - time)<400) { 
      if(confirm('You do not seem to have iThrown installed, do you want to go download it now?')){ 
      document.location = 'http://itunes.apple.com/WebObjects/MZStore.woa/wa/viewSoftware?id=293049283&mt=8&uo=6'; 
      } 
     } 
    }, 300); 
} 
+0

Chúng tôi đã gặp sự cố trong đó biến "hiện tại" trong giải pháp này bị sai lệch. Chúng tôi có thể đợi vài phút trong ứng dụng, quay lại trình duyệt và nhận xác nhận. Có vẻ như quá trình đánh thức ngủ đông là lỗi. – JoshNaro

1

Đây là biến thể của 2 giải pháp trước. Nó sẽ tạo một liên kết có thể được mở trong Google Chrome. Nếu nó không thành công nó sẽ mở ra các liên kết sử dụng http

<script> 
function checkChrome(h){ 
    document.location=h; 
    var time = (new Date()).getTime(); 
    setTimeout(function(){ 
    var now = (new Date()).getTime(); 
    if((now-time)<400) { 
    if(confirm('Missing Chrome. Download it now?')){ 
    document.location = 'http://itunes.apple.com/us/app/chrome/id535886823?mt=8'; 
    } else { 
    document.location=h.replace('googlechrome','http'); 
    } 
    } 
    }, 300); 
} 
</script> 

<a href="googlechrome://www.google.com" onclick="checkChrome(this.href);return false;">Open Google with Chrome</a> 
6

Một lớn (ít nhất là làm việc trong các phiên bản trình duyệt mới nhất) Cách giải quyết là để kiểm tra xem cửa sổ trình duyệt đã tập trung sau một thời gian chờ ngắn, bằng cách này bạn có thể hiển thị một hộp thoại cho người sử dụng chỉ khi URI scheme đã không làm việc

HTML:

<a class="uri-link" data-uri="qobuzapp://" href="#">URI</a>​ 

Javascript (sử dụng jQuery đây):

var windowHasFocus; 

$(window).focus(function() { 
    windowHasFocus = true; 
}).blur(function() { 
    windowHasFocus = false; 
}); 

function goToUri(uri) { 
    window.location = uri; 
    setTimeout(function(){ 
    if (windowHasFocus) { 
     if (confirm('You do not seem to have Qobuz installed, do you want to go download it now?')){ 
     window.location = 'http://www.qobuz.com'; 
     } 
    } 
    }, 100); 
} 

$('a').on('click', function(){ 
    goToUri($(this).data('uri')); 
});​ 

Đây là một jsFiddle làm việc, chỉ cần cập nhật nó với URI scheme của riêng bạn: http://jsfiddle.net/mF6TZ/

+2

jsfiddle đã chết – jcesarmobile

10

tôi thấy pagehide sự kiện để được mạnh mẽ hơn tùy thuộc vào thời gian hệ thống. Đối với những người trong chúng ta, những người thích ưu tiên không phải jQuery, thì đây là đoạn trích.

var appurl = 'custom://url'; 
    var appstore = 'https://itunes.apple.com/us/app/your-app'; 

    var timeout; 
    function preventPopup() { 
    clearTimeout(timeout); 
    timeout = null; 
    window.removeEventListener('pagehide', preventPopup); 
    } 
    function startApp() { 
    window.location = appurl; 
    timeout = setTimeout(function(){ 
     if(confirm('You do not seem to have the App installed, do you want to go download it now?')){ 
     document.location = appstore; 
     } 
    }, 1000); 
    window.addEventListener('pagehide', preventPopup); 
    } 
6

Bắt đầu từ iOS 6.0 của Apple đã trình bày App Biểu ngữ thông minh mà làm những gì hầu hết chúng ta đang tìm kiếm:

  • Gửi cho App Store nếu ứng dụng không được cài đặt.
  • Mở ứng dụng có liên kết sâu cụ thể, sử dụng thông số đối số ứng dụng.

Bao gồm các thẻ meta sau:

<meta name="apple-itunes-app" content="app-id=myAppStoreID, affiliate-data=myAffiliateData, app-argument=myURL"> 

lấy từ đây: Safari Web Content Guide

0

Tôi có nhận xét này https://stackoverflow.com/a/18715513/49114 với một plugin jQuery để thêm liên kết ứng dụng thay thế cho các liên kết thường xuyên.

+1

Plugin không giải quyết được sự cố cảnh báo khi bạn KHÔNG CÓ ứng dụng được cài đặt – Magico

0

Tôi cố gắng chỉ sử dụng sự kiện 'pagehide', nhưng sau đó nó không hoạt động trong Firefox. Tôi đã tạo phiên bản này tại đây http://jsfiddle.net/thiagomata/6tvoc4f1/2/ những gì hoạt động trong Firefox, Google Chrome và Safari. Tôi chưa thử nghiệm trong Internet Explorer.

Một điều cần thiết để làm cho nó hoạt động trong Firefox, đã sử dụng iframe để đặt src. Điều này cho phép tôi gọi ứng dụng mà không cần rời khỏi trang của mình.

<a class="uri-link" href="#" 
    data-uri-app="myapp://" 
    data-url-app-not-found="http://www.google.com?q=not-found-link" 
    > 
    Example 1 
</a>​ 
<a class="uri-link" href="#" 
    data-uri-app="myapp://" 
    data-url-app-not-found="http://www.google.com?q=not-found-link" 
    data-url-app-found="http://www.google.com?q=found-link" 
    > 
    Example 2 
</a>​ 
<a class="uri-link" href="#" 
    data-uri-app="notexists://" 
    data-url-app-not-found="http://www.google.com?q=not-exists" 
> 
    Example 3 
</a>​ 
<iframe id="callapp" style="display:none"></iframe> 
+0

khái niệm đẹp. mặc dù các ứng dụng tìm thấy không xảy ra bao giờ hết. Ngay cả khi ứng dụng được cài đặt (tôi đã thử instagram: // app), nó sẽ kích hoạt ứng dụng không có sẵn. –

+0

Bạn đã cố gắng làm cho thời gian chờ lớn hơn? Thay đổi giá trị trong dòng 95 từ 1000 đến 9000 (chỉ để cho vui) và cho tôi biết điều gì sẽ xảy ra. –

1

Điều này dựa trên câu trả lời của mrahman. Như đã lưu ý, bởi JoshNaro Ngày mới() trả lại ngày sai khi được gọi trong thời gian chờ. Các thử nghiệm cho thấy ngày tháng không được cập nhật trong các chủ đề được bắt đầu trước khi ứng dụng bị hủy kích hoạt.

Một setTimeout xấu xí nữa được gọi sau khi kích hoạt sẽ tạo một chuỗi mới với ngày hiện tại.

này đã được thử nghiệm trên iOS 8.

function startiThrown() { 
    document.location = appurl; 
    var time = (new Date()).getTime(); 
    setTimeout(function(){ 
     setTimeout(function(){ // <-- start new thread after activation 
      var now = (new Date()).getTime(); 
      if((now - time)<400) { 
       if(confirm('You do not seem to have iThrown installed, do you want to go download it now?')){ 
        document.location = 'http://itunes.apple.com/WebObjects/MZStore.woa/wa/viewSoftware?id=293049283&mt=8&uo=6'; 
       } 
      } 
     }, 10); // <-- start new thread after activation 
    }, 300); 
} 
Các vấn đề liên quan