0

これで髪を伸ばしてる…

私のアプリはとフロントエンドでjquery-mobile (1.1.1)実行されています。(ipad1 + 3、iOS3 + 5)のMobile Safariでアプリを実行すると正常に動作しますが、ホーム画面のアイコンからアプリを開くとjquery (1.7.2)requireJS

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

新しいページをロードしたり、ページ間を行ったり来たりするすべての Jquery Mobile AJAX リクエストが失敗します。代わりに、リンク先のページが新しく読み込まれる前に、ページの読み込みエラーメッセージが短時間点滅し、アプリを再起動します。

私はこれに2日間座っていて、次のすべてを試しました:

manifest(私は実際にはマニフェストを使用していません。それが役立つかどうかを確認しようとしました)

requireJS

  • 私のアプリからrequireJSを完全に削除する>まだ機能しない
  • キャッシュ無効化> 役に立たなかった

offline

しかし、ページが読み込まれず、ナビゲーションが壊れていることにまだ悩まされています。

私にとって理にかなっている 1 つの原因は、Safari がフルスクリーン モードと Mobile Safari で異なる HTTP User-Agent 文字列を使用していると主張したこのブログ投稿でした。フルスクリーンで渡された文字列が認識できないように見えるため、基本的なブラウザ設定のみが期待されます (JavaScript のサポートがないなど)。

投稿された回避策 ( for ASP.net) は、次のようにユーザー エージェントを偽造しています。

 protected void Page_PreInit(object sender, EventArgs e) {
     if (Request.UserAgent != null && Request.UserAgent.IndexOf("AppleWebKit", StringComparison.CurrentCultureIgnoreCase) > -1) {
        this.ClientTarget = "uplevel";
        }
      }

質問:
iOS フルスクリーン モードがアクティブな場合、Javascript/Jquery にこのような修正 (~ ユーザー エージェントの偽装) を含めるにはどうすればよいですか (これはまったく検出可能ですか)? また、このアプローチに注意点があるかどうかも知りたいですか? 間違っているようです...

4

1 に答える 1

3

ユーザー エージェントに問題がある場合は、javascript で解決することは不可能です。ユーザー エージェントは、JavaScript を使用して変更することはできません。JavaScript がダウンロードされる前に、アプリケーション (Web ブラウザー) によってサーバーに送信されます。XMLHttpRequest 標準では、スクリプトがこれらのヘッダーのいずれかを変更しようとしている場合は、リクエストをすぐに終了する必要があると指定されているため、javascript でトリックを試しても機能しません ( JQuery Ajax Request: Change User-Agent )。

Accept-Charset
Accept-Encoding
Access-Control-Request-Headers
Access-Control-Request-Method
Connection
Content-Length
Cookie
Cookie2
Content-Transfer-Encoding
Date
Expect
Host
Keep-Alive
Origin
Referer
TE
Trailer
Transfer-Encoding
Upgrade
User-Agent
Via

私の推測では、これはセキュリティ上の理由によるものです。

別の方法として、サーバー側でリクエストのユーザー エージェントを検出し、その特定のユーザー エージェントで機能するコードを返しますが、もちろん、誰もそれ以上の作業をしたくありません。

ユーザーエージェントが本当に違うかどうか確信がありますか? ユーザーエージェントが異なる場合、あなたが知らないうちに自分のコードが機能しない理由は考えられません。唯一の理由は、使用しているサードパーティの JavaScript ライブラリにある可能性があります。

于 2012-08-20T22:15:06.950 に答える