0

我想包括iPad應用程序的科爾多瓦相機插件,但在使用navigator.camera調用相機之後,它僅在應用程序轉到背景(點擊主頁按鈕)。但是,只有在我正在監聽webView:shouldStartLoadWithRequest事件時,纔會發生這種情況,我將其用作javascript-Objective C橋接。使用科爾多瓦相機只有當應用程序移動到背景時才被激活

版本:

  • 科爾多瓦: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,如果我聽一個web視圖: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'。點擊主頁按鈕後,請求流將停止,相機顯示。任何想法爲什麼會發生這種情況?

此外,我必須讓我的MainViewController符合UIWebViewDelegate協議,才能真正監聽shouldStartLoadWithRequest事件,以防我使用4.1.1 cordova.js。在這種情況下,只要符合UIWebViewDelegate協議就足以使問題發生。奇怪的是,如果我正在使用一個較老的cordova - 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 

隨後約一百名 '差距://準備' 的URL地址在接下來的4數秒

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裝載」

我希望這是有幫助的人其他。

+0

對不起,但它沒有爲我工作。我沒有使用任何框架 - 只是默認的cordova應用程序,所以我的所有腳本都是從文件系統加載的,而且我的CSP元標記上有自我屬性。 我最終編寫了一個插件來處理shouldStartLoadWithRequest塊中的任何內容。 – indGov

相關問題