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