2016-11-16 8 views
1

私はCordovaのCLIを使って、HTML、CSS、およびJavaScriptで構成されるモバイルアプリケーションを構築しています。アプリケーションは、jQuery 2.1.4、jQuery Mobile 1.4.5を使用し、Cordova 6.4.0にパッケージされています。アプリケーションはAndroid 6.0.0とiOS 10.1のために寄付されています。iPhone 7で掛かっているCordovaアプリケーションのajax

私のすべてのajaxコールがiPhone 7デバイスでのみハングアップする問題があります。以下は私が作ろうとしているAJAX呼び出しの例です。

私のエンドポイントのいずれにもGETまたはPOST要求を行うことはできません。すべてが無期限にハングアップします。要求に60秒のタイムアウトを追加すると、タイムアウトは60秒後に失敗機能を起動します。 App Transport Securityを有効にしたHTTPSエンドポイントや、App Transport Securityを無効にしたHTTPエンドポイントを試してみました。私が何を試しても、タイムアウトを含まない限り、Ajaxは単にハングし、失敗したり完了したりすることはありません。

私は、iPhone 5、iPhone 5C、iPhone 6、およびiPhone 6Sでアプリケーションをテストしました。それらはすべてiOS 10.1.1でテストされています。これらはハングしておらず、Ajaxリクエストは期待通りに完了します。見知らぬ人でも、AjaxリクエストはXCodeのiPhone 7 Simulatorでも動作します。しかし、iPhone 7のすべてのユーザーとiPhone 7のテストデバイスでは、ajaxが無期限にハングするこの問題が発生します。

この問題を解決する方法についてのご意見はありますか?

EDIT:

私はそれがメタタグを追加することで動作させることができました:

<meta http-equiv="Content-Security-Policy" content="default-src * 'self' data: gap: https://ssl.gstatic.com 'unsafe-eval'; style-src * 'self' 'unsafe-inline'; script-src * 'self' 'unsafe-inline'; connect-src * https: http:"> 

私はコルドバは、すべての値にワイルドカードを追加することによって作成したメタデフォルトのメタタグを修正。 script-srcとconnect-srcをタグに追加しました。私はもともとワイルドカードなしでそれらを試しましたが、それも私の問題を解決しませんでしたので、単にそれらのキーの両方にワイルドカードを含めて、ajaxリクエストが機能し始めました。

EDIT 2:基本認証ヘッダがIISに無効な資格情報を使用して送信された場合、iOSデバイスでも、AJAXリクエストが無期限にハングアップするようになります同様の問題を経験するかもしれない他の人のための注意点として

サーバ。無効な資格情報が送信されると、IISサーバーはデフォルトでHTTPヘッダー「WWW-Authenticate」を使用して401を返すように構成されます。デバイスがこのヘッダーを受信した場合、アプリケーション層に応答が返されず、失敗機能は決して起動しません。これは、iOSとCordovaのアプリケーションに関する既知の問題です。クライエント側でこの問題を回避するための迅速で汚い(理想的ではありませんが)方法は、ajaxオプションをajaxオプション 'async:false'と同時に設定することです。これにより、応答がアプリケーション層に返され、アプリケーションが前進することができます。つまり、エラー関数がトリガーされます。すべてのあなたのAjaxリクエストに基本的な認証が必要な場合は、アプリケーションの正当な理由はありませんが、問題の診断には少なくとも役立ちます。

答えて

1

Jakeあなたはこのような情報をあなたの情報に追加しようとすることができます。他のすべてはあなたが取得している場合は動作するように思われる、この修正プログラムを試すことができます失敗した場合のplist

<key>NSAppTransportSecurity</key> 
 
<dict> 
 
    <key>NSExceptionDomains</key> 
 
    <dict> 
 
     <key>vimeo.com</key> 
 
     <dict> 
 
      <key>NSExceptionAllowsInsecureHTTPLoads</key> 
 
      <true/> 
 
      <key>NSThirdPartyExceptionAllowsInsecureHTTPLoads</key> 
 
      <true/> 
 
      <key>NSExceptionRequiresForwardSecrecy</key> 
 
      <false/> 
 
      <key>NSThirdPartyExceptionRequiresForwardSecrecy</key> 
 
      <false/> 
 
      <key>NSIncludesSubdomains</key> 
 
      <true/> 
 
      <key>NSExceptionMinimumTLSVersion</key> 
 
      <string>TLSv1.0</string> 
 
      <key>NSRequiresCertificateTransparency</key> 
 
      <false/> 
 
     </dict> 
 
    </dict> 
 
</dict>

ます。また、

<!-- Enable all requests, inline styles, and eval() --> 
 
<meta http-equiv="Content-Security-Policy" content="default-src *; style-src 'self' 'unsafe-inline'; script-src 'self' 'unsafe-inline' 'unsafe-eval';">

を試すことができますajaxが失敗する原因となる認証チャレンジ

https://github.com/tripodsan/cordova-ios/commit/5f0133c026d6e21c93ab1ca0e146e125dfbe8f7e

か、HTTPは、セキュリティポリシーとどのようにそれを修正するに変更を説明する Click Here

つの最後のリンクをリクエストできますコルドバのためにこのプラグインを試すことができます。 Click Here

関連する問題