0

iPadアプリのコードバカメラプラグインを追加しようとしていますが、navigator.cameraを使用してカメラを起動した後、背景(ホームボタンをタップ)。しかし、これは私がjavascript-Objective Cブリッジとして使用しているwebView:shouldStartLoadWithRequestイベントをリッスンしている場合にのみ発生します。使用アプリがバックグラウンドに移動したときにのみ、コルディアカメラが起動する

バージョン:

  • コルドバ:5.4.1
  • のiOSプラットフォーム/プラットフォーム固有のcordova.js:4.1.1
  • のXcode:7.2

手順プロジェクトを設定するには:

  • cordova create pluginTest com.pluginTest pluginテスト
  • CD pluginTestは
  • コルドバプラットフォームは、iOSを追加
  • コルドバプラグインカメラをテストするにはコルドバ・プラグインカメラ

を追加し、私はコルドバで生成されたindex.jsファイルを、編集しているので、 onDeviceReady機能がどのように見えること:

onDeviceReady: function() { 
    app.receivedEvent('deviceready'); 
    alert(navigator.camera); 
    navigator.camera.getPicture(function(imageData) { 
     alert('success'); 
    }, 
    function(message) { 
     alert('fail'); 
    }); 
} 

これは正常に動作するよう、カメラは警告後にポップアップ表示されます。

しかしMainViewController.mで、私はWebViewのために聞いていた場合:ようshouldStartLoadWithRequestイベント:

-(BOOL) webView:(UIWebView *)webView shouldStartLoadWithRequest: (NSURLRequest *)request navigationType: (UIWebViewNavigationType)navigationType { 

    NSString* req = [[request URL] absoluteString]; 
    NSLog(req); 

    return YES; 
} 

はその後、アプリのロード後、最初の位置の変更はその後、index.htmlにある - かつてnavigator.camera.getPictureが実行されます。上記のメソッドに当たる場所の変更は無限であり、urlは常に 'gap:// ready'です。ホームボタンがタップされると、要求の流れが停止し、カメラが表示されます。なぜこのようなことが起きているのでしょうか?

また、4.1.1 cordova.jsを使用していた場合、実際にshouldStartLoadWithRequestイベントをリスンするために、私のMainViewControllerをUIWebViewDelegateプロトコルに準拠させる必要がありました。この場合、問題が発生するにはUIWebViewDelegateプロトコルに準拠するだけで十分でした。奇妙なことに、以前のコードバスのプラットフォーム(3.9.2)を使用していた場合、CDVViewControllerはすでにshouldStartLoadWithRequestイベントをリスンしているようです。いずれの場合も、アプリの停止後にカメラが表示されます。

Xcodeでコンソールトレースは示しています

2016-05-04 19:02:51.015 plugTest2[3949:2271226] file:///var/mobile/Containers/Bundle/Application/FE21DCB1-7ADE-4754-80F1- 7055F8E1F450/plugTest2.app/www/index.html 
2016-05-04 19:02:51.020 plugTest2[3949:2271226] Resetting plugins due to page load. 
2016-05-04 19:02:51.759 plugTest2[3949:2271226] Finished load of: file:///var/mobile/Containers/Bundle/Application/FE21DCB1-7ADE-4754-80F1-7055F8E1F450/plugTest2.app/www/index.html 
2016-05-04 19:02:57.149 plugTest2[3949:2271226] gap://ready 

約百続く 'ギャップ://準備ができて' 次の4秒内のURL ...

2016-05-04 19:03:01.738 plugTest2[3949:2271226] gap://ready 
2016-05-04 19:03:02.112 plugTest2[3949:2271226] Snapshotting a view that has not been rendered results in an empty snapshot. Ensure your view has been rendered at least once before snapshotting or snapshot after screen updates. 

答えて

1

私が着いた知っています遅くなりましたが、今日はこれを把握するのに苦労しました。この問題を修正して、コンテンツセキュリティポリシータグに次の内容を追加することができました:

default-src * blob: 'self' gap: 

私はあなたを文脈に置きました。これは私のWebアプリケーションのindex.htmlのメタタグです。

<meta http-equiv="Content-Security-Policy" content="default-src * blob: 'self' gap:; script-src 'self' 'unsafe-inline' (…)/ > 

thisの問題の情報が見つかりました。それが説明するように:

「ギャップ://準備ファイル:// *はiOSの10アプリでリモート コンテンツの読み込みを可能にするために必要とされる、」私はこれが誰かに役立つことを願いますelse。

+0

申し訳ありませんが、それは私のために働いていませんでした。私はどのフレームワークも使用していませんでした。デフォルトのコードバアプリだけでした。そのため、すべてのスクリプトはファイルシステムからロードされました。私はCSPメタタグに自己属性を持っていました。 私は、shouldStartLoadWithRequestブロックにあったものを処理するプラグインを作成しました。 – indGov

関連する問題