30

まとめホーム画面に保存されている Web アプリから起動したい URL スキームが正しく機能するアプリがありますが、通常の JavaScript リダイレクト メソッドが機能しないようです。

詳細ホーム画面に保存されたリンクからフルスクリーン モードで開く iOS Web アプリを作成しようとしています。Web アプリは、特定のネイティブ アプリを開く必要があります。ネイティブ アプリの URL スキームを既に登録し、正しく動作することを確認しました。たとえば、Safari のアドレス バーにスキームを直接入力して、ネイティブ アプリを開くことができます。+openURL:の方法を使用して、他のアプリケーションから開くこともできますUIApplication。また、ホーム画面に追加できるネイティブ Web アプリから特定の引数を指定して開きたいと思います。

私がやろうとしているのは、ネイティブ アプリ内で JavaScript を次のように使用することです。

window.location = "myapp://myparam";

このコードを Web アプリ内で使用すると、次のようなアラートが表示されます。

「myWebAppName を開けません - myWebAppName を開けませんでした。エラーは「この URL を表示できません」でした。」.

この同じ JavaScript を Safari 内で実行すると、正しく機能します。を使用しても同じ結果が得られwindow.location.replace("myapp://myparam")ます。

Web アプリの html は次のとおりです。

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01//EN"
   "http://www.w3.org/TR/html4/strict.dtd">

<html lang="en">
<head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
    <title>untitled</title>
    <meta name="generator" content="TextMate http://macromates.com/">
    <meta name="author" content="Carl Veazey">
    <!-- Date: 2012-04-19 -->
    <meta name="viewport" content="width=device-width; initial-scale=1.0; maximum-scale=1.0; user-scalable=0;" />
    <meta name="apple-mobile-web-app-capable" content="yes" />
    <meta names="apple-mobile-web-app-status-bar-style" content="black-translucent" />
</head>
<body>
    <script type="text/javascript" charset="utf-8">
        if (window.navigator.userAgent.indexOf('iPhone') != -1) {
            if (window.navigator.standalone == true) {
                window.location = "myapp://myparam";
            } else {
                document.write("please save this to your home screen");
        };} else {
                alert("Not iPhone!");
                document.location.href = 'please-open-from-an-iphone.html';
        };
    </script>
</body>
</html>

ここで何が間違っていますか?私は JavaScript とモバイル Web にかなり慣れていないので、明らかな何かが欠けているだけだと思います。

4

5 に答える 5

14

あなたのコードは、モバイル サファリの場合は機能しますが、iOS デスクトップのブックマークの場合は機能しません。以前にそのように試したことはありませんでしたが、それが問題です。JSをに設定した場合

<script type="text/javascript" charset="utf-8"> 
window.location = "myapp://myparam";
</script>

ブラウザでは動作しますが、ブックマークすると失敗します。クロムがないため、ブックマークされたときにURLがどのように読み込まれるかで何かをする必要があるかもしれませんか? 私の推測では、Apple は予約済みのマーク ページがローカル アプリにアクセスすることを望んでいないと思います。また、ローカルでホストされているモバイル サファリで動作するページをブックマークすると、ブックマークを介してロードできないことに気付きました。それは本当に奇妙です....

私があなたに一番お勧めするのは、それを作ることです

<meta name="apple-mobile-web-app-capable" />

それ以外の

<meta name="apple-mobile-web-app-capable" content="yes" />

このようにしてホーム画面に表示されますが、残念ながらクロムで読み込まれます. それが私が考えることができる唯一の解決策です。

于 2012-04-19T22:12:47.133 に答える
8

iOS アプリケーションがインストールされている場合にそれを開く必要があり、ページの機能を維持したい場合、が登録されていない場合、リダイレクトによってユーザーが到達不能な宛先に誘導されるlocation.href = 'myapp://?params=...';ため、 は役に立ちません。myapp://

最も安全な方法は、iframe. 次のコードは、iOS アプリがインストールされている場合は開き、インストールされていない場合でもエラーは発生しません (ただし、アプリがインストールされていない場合、ページにアクセスできないことをユーザーに警告する場合があります)。

var frame = document.createElement('iframe');
frame.src = 'myapp://?params=...';
frame.style.display = 'none';
document.body.appendChild(frame);

// the following is optional, just to avoid an unnecessary iframe on the page
setTimeout(function() { document.body.removeChild(frame); }, 4);
于 2014-04-04T11:22:52.203 に答える
0

このようにしてみてください:インデックスページ

<html><head></head><body>
<?php
$app_url = urlencode('YourApp://profile/blabla');
$full_url = urlencode('http://yoursite.com/profile/bla');
?>   

<iframe src="receiver.php?mylink1=<?php echo $app_url;?>" width="1px" height="1px" scrolling="no" frameborder="0"></iframe>
<iframe src="receiver.php?mylink2=<?php echo $full_url;?>" width="1px" height="1px" scrolling="no" frameborder="0"></iframe>

</body>
</html>

receiver.phpページ:

<?php if ($first == $_GET['mylink1'])) { ?>
   <script type="text/javascript">
   self.window.location = "<?php echo $first;?>"; 
   </script>

<?php } if ($second == $_GET['mylink2'])) { ?>
   <script type="text/javascript">
   window.parent.location.href = "<?php echo $second ;?>"; 
   //window.top.location.href=theLocation;
   //window.top.location.replace(theLocation);
   </script>
<?php } ?>
于 2014-06-03T19:08:41.457 に答える
0

更新を提供するために、iOS14 Beta7 は、登録された x-callback URL を介してローカル アプリを開いているようには見えません。

于 2020-09-12T13:32:39.247 に答える
-1
<?php 
// Detect device type
$iPod = stripos($_SERVER['HTTP_USER_AGENT'],"iPod");
$iPhone = stripos($_SERVER['HTTP_USER_AGENT'],"iPhone");

// Redirect if iPod/iPhone
if( $iPod || $iPhone ){
    header('Location:http://example.com');      
}
?>

上記は、デバイスが iPod または iPhone の場合、ブラウザーを入力された URL (http://example.com/) にリダイレクトします。スクリプトを Web アプリの先頭に追加します。.xml ではなく、必ず.phpファイルとして保存してください.html

ソース: http://www.schiffner.com/programming-php-classes/php-mobile-device-detection/

于 2012-04-19T22:25:56.107 に答える