2

iPhone / iPadのホーム画面にアイコンとして追加できるWebサイトがあります(すべてのWebサイトと同じように)。アイコンをタップすると、Webサイトが全画面モードで表示されます(イェーイ)。このWebサイト上のすべてのリンクがサファリで開き、それによってフルスクリーンモードから抜け出すのを防ぐために、すべてのhtmlアンカーのクリックイベントをオーバーライドしています。これはうまく機能しますが、.NETリンクボタンでは機能しません。おそらくポストバックを作成する必要があるためです。

これは私のコードです:

var iOS = (navigator.userAgent.match(/(iPad|iPhone|iPod)/i) ? true : false);
if (iOS) {
    $("a").click(function (event) {
        var href = $(this).attr("href");
        if (href.indexOf("doPostBack") == -1 && href.indexOf("javascript") == -1) {
            event.preventDefault();
            window.location = $(this).attr("href");
        }
    });
}

ご覧のとおり、hrefに「doPostBack」(Linkbuttonsが行う)が含まれている場合、または「javascript」が含まれている場合(これはonclick ='xxx()'などのリンクの場合)、この特別な動作を防止しようとしています。ただし、これは機能しません。Linkbuttonで作成されたリンクが応答しないので、理由がわかりません。

どんな助けでも大歓迎です。ありがとう

4

1 に答える 1

4

大丈夫。この問題に専念する長いセッションの後、私は最終的にこれを解決しました。解決策だけが必要な場合は、最後までジャンプしてください。

まず、リンクボタンだけでなく、javascriptでポストバックを作るもの全てです。ASP.NET チェックボックスなどと同じように、autopostback = true のドロップダウンリストにすることができます。=大問題。

最初に、全画面表示にすると、iPhone/iPad ではユーザー エージェントが異なることがわかりました。1 つ目は Safari で、2 つ目は全画面表示の「アプリ」です。

Mozilla/5.0 (iPad; CPU OS 5_0_1 like Mac OS X) AppleWebKit/534.46 (KHTML, like Gecko) Version/5.1 Mobile/9A405 Safari/7534.48.3
Mozilla/5.0 (iPad; CPU OS 5_0_1 like Mac OS X) AppleWebKit/534.46 (KHTML, like Gecko) Mobile/9A405

そう。ここで何が起こっているのですか?.NET のブラウザー定義ファイルは 2 番目のユーザー エージェントを認識せず、デフォルトで "Mozilla" に設定されています。これは非常に標準化された低レベルのブラウザー定義であり、機能は非常に低くなっています。ユーザーエージェントを正規表現と一致させる「新しい」ブラウザを定義したカスタムブラウザファイルを作成しようとしました: iPhone/iPad/iPod が含まれている場合 - .NET にこれが Mozilla ではなく Safari ブラウザであることを伝えます。残念ながら、私はそれを機能させることができませんでした。ファイルを App_Browsers フォルダーに追加することも、ファイルをフレームワークにグローバルに登録することもありません。

ともかく。解決策を探し続け、少し修正した回避策を見つけました。ページの PreInit メソッド (またはベースページの PreInit メソッド) で、次のようにします。

protected void Page_PreInit(object sender, EventArgs e)
{
    if (Request.UserAgent != null && (Request.UserAgent.Contains("iPhone") || Request.UserAgent.Contains("iPad") || Request.UserAgent.Contains("iPod")))
        this.ClientTarget = "uplevel";
}

これにより、ブラウザーは IE6 から .NET のように見え、すべてが完全に機能します。注意: コードのどこかで古いブラウザー (IE 6 など) を検出している場合。この回避策の後も機能することを確認してください。iOS デバイスが "you-got-an-old-browser-page" にリダイレクトされるのを防ぐために、if ステートメントを追加する必要がありました。

于 2012-05-29T21:31:14.943 に答える