cordovaiOSvideo标签本地文件源
我在我的基于Cordova的应用上在iOS上播放本地video时遇到问题。 在开始的时候,我想强调一下,只有在使用WKWebView的时候,这个问题才会发生,如果使用UiWebView ,video播放效果会很好。 这是我的情况:
– 用户来屏幕到哪个videourl传递
-Via FileTransfer我将它下载到手机并将其存储在所需的位置
– 使用JSvideo加载到<video>
标签并播放。
基本上,我正在做的所有事情都是在回答这个SO 问题时所描述的。 UiWebView的问题是,如果相对path被设置为src,video出于某种原因无法加载(无论使用哪种组合),所以这个解决scheme对我来说很好,因为它基于这一行代码:
entry.toURL()
这将返回下载video的完整path,至less对于UiWebView来说是非常好的。
WkWebView的问题是entry.toURL()返回smth。 喜欢这个:
file:///var/mobile/Containers/Data/Application/3A43AFB5-BEF6-4A0C-BBDB-FC7D2D98BEE9/Documents/videos/Dips.mp4
而WKWebView不能和file://协议一起工作。 而且,WKWebView都不能用相对path:(
任何人都可以帮我解决这个问题吗?
今天我用了以下工具,但是只有在释放模式下部署到我的设备时才能正常工作。 在debugging模式下将应用程序部署到我的设备时,它将无法工作。
- iOS 9.3.2
- cordova4.0.0(iOS 3.8.0)
- Telerik WKWebView Polyfill 0.6.9
video列表加载方法:
var path = window.cordova.file.documentsDirectory, //iTunes File Sharing directory href = 'http://localhost:12344/Documents', //WKWebView default server url to documents list = []; function fsSuccess(dir) { var reader = dir.createReader(); reader.readEntries(function (entries) { for (var i = 0; i < entries.length; i++) { list.push({ name: entries[i].name, path: href + entries[i].fullPath }); } }); } function fsError(error) { console.log('error', error) } window.resolveLocalFileSystemURL(path, fsSuccess, fsError);
video列表点击处理器:
var video = $('#video')[0], source = $('#source'); function play(index) { source.attr('src', list[index].path); video.load(); video.play(); }
video播放器标记:
<video id="video" autoplay controls loop webkit-playsinline> <source id="source" type="video/mp4" /> </video>
我正在debugging,直到我试图释放buid,它的工作,我的头在我的桌子上拉仁胡克。
使用cordova file opener插件的示例代码片段可以从设备上打开下载文件(不过在WKWebView中没有testing过)
var fileTransfer = new FileTransfer(); var cdr; if (sessionStorage.platform.toLowerCase() == "android") { window.resolveLocalFileSystemURL(cordova.file.externalRootDirectory, onFileSystemSuccess, onError); } else { // for iOS window.requestFileSystem(LocalFileSystem.PERSISTENT, 0, onFileSystemSuccess, onError); } function onError(e) { navigator.notification.alert("Error : Downloading Failed"); }; function onFileSystemSuccess(fileSystem) { var entry = ""; if (sessionStorage.platform.toLowerCase() == "android") { entry = fileSystem; } else { entry = fileSystem.root; } entry.getDirectory("Cordova", { create: true, exclusive: false }, onGetDirectorySuccess, onGetDirectoryFail); }; function onGetDirectorySuccess(dir) { cdr = dir; dir.getFile(filename, { create: true, exclusive: false }, gotFileEntry, errorHandler); }; function gotFileEntry(fileEntry) { // URL in which the pdf is available var documentUrl = "http://localhost:8080/testapp/test.pdf"; var uri = encodeURI(documentUrl); fileTransfer.download(uri, cdr.nativeURL + "test.pdf", function(entry) { // Logic to open file using file opener plugin openFile(); }, function(error) { navigator.notification.alert(ajaxErrorMsg); }, false ); }; function openFile() { cordova.plugins.fileOpener2.open( cdr.nativeURL + "test.pdf", "application/pdf", //mimetype { error: function(e) { navigator.notification.alert("Error Opening the File.Unsupported document format."); }, success: function() { // success callback handler } } ); };
- cordovaiOS位置消息
- KeyboardShrinksView使失去焦点
- iOS中的链接Ionic应用程序不能立即打开
- Xcode 8和iOS 10 Cordova项目上的代码签名错误
- Phonegap 2.6与KeyboardShrinksView和HideKeyboardFormAccessoryBar
- (Phonegap + iOS)为什么当我在设备或模拟器中获得文件系统的完整path时,我只能得到“/”?
- Objective-C vs PhoneGap
- VS2013 Cordova iOS Remotebuild错误无法POST /build/tasks?command=build&vcordova=4.3.1&cfg=debug
- Client.ipa不包含文件