3

jQuery(1.7.2)をかなり多用するasp.net 4でクライアント用のWebサイトを構築しました。このサイトは、最新のすべてのブラウザー、モバイル クライアントなどで正常に動作します。

クライアントはビジネス用の Twitter アカウントを持っており、誰かがそのアカウントをフォローすると、サイトへのリンクを含む自動応答メッセージが届きます。彼は、顧客が iOS デバイスの twitter アプリを使用してそのリンクをクリックすると、サイトが正しく機能しないという問題を提起しました。

私はこれを、TwitterがSafariではなくWebビューを使用してサイトを表示するという事実に突き止めました.javascriptを介してasp.net scriptmanagerインスタンスを取得しようとすると、このWebビュー内で何らかのエラーが発生するため、ドキュメントは決してjQuery の document.ready イベントが発生しなくなります。後続のスクリプトを入れると、正常にwindow.load動作します。

これをテストするために、全体として次のような非常に単純なページを作成しました。

<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml">
    <head runat="server">
        <title></title>
        <script src="//ajax.googleapis.com/ajax/libs/jquery/1.7.2/jquery.min.js" type="text/javascript"></script>
    </head>
    <body>
        <form id="form1" runat="server">

            <asp:ScriptManager ID="sm" runat="server"></asp:ScriptManager>

            <script type="text/javascript">

                $(document).ready(function () {
                    if (typeof (Sys) === "object") {
                        var manager = Sys.WebForms.PageRequestManager.getInstance();
                    }
                });

                $(document).ready(function () {
                    alert("staging1");
                });
                $(window).load(function () {
                    alert("staging2");
                });
            </script>
        </form>
    </body>
</html>

したがって、そのページを webview に読み込むと、window.load 内から 2 番目のアラートしか取得できません。変数を宣言する行を取り出すとmanager. 2 番目の document.ready イベントが発生すると、両方のアラートを受け取ります。

任意のブラウザーでページを実行すると、常に両方のアラートが表示されます。

誰かがこれに遭遇しましたか、またはこれが機能しない理由がありますか?

ヘルプ/専門知識は大歓迎です!

ありがとう

4

1 に答える 1

3

これを行う必要があります:

<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
    <title></title>
     <script src="//ajax.googleapis.com/ajax/libs/jquery/1.7.2/jquery.min.js" type="text/javascript"></script>

     <script type="text/javascript">

    $(document).ready(function() {
        if (typeof (Sys) === "object") {
        var manager = Sys.WebForms.PageRequestManager.getInstance();
        }
    });

         $(document).ready(function () {
             alert("staging1");
         });
         $(window).load(function () {
             alert("staging2");
         });
    </script>
</head>
<body>
    <form id="form1" runat="server">

    <asp:ScriptManager ID="sm" runat="server"></asp:ScriptManager>

    </form>
</body>
</html>
于 2012-11-02T12:43:44.663 に答える