需求
用WebView显示用户从手机相册中选择的图片或视频。
一、UIWebView加载本地图库选择的图片或视频(真机)
UIWebView实现很简单,直接调用JS方法,将选择的图片或视频的全路径分别放置
<img>
或<video>
标签的src
中就可以,直接就可以显示。
部分代码参考
插入图片JS方法
function insertImage(url) {
if(!url) return;
document.execCommand('insertHtml', false, '<p><img class="MO_CLIP" style="max-width: 50% !important;" src="' + url + '"/></p><br>');
}
插入视频JS方法
function insertVideo(url) {
document.execCommand('insertHtml', false, '<p><video class="MO_CLIP" style="max-width: 50% !important; background:black;" src="' + url + '" controls="controls"></p><br>');
}
之后在选择图片或视频的回调中将路径传递进去就可以显示了。
二、WKWebView加载本地图库选择的图片或视频(真机)
WKWebView实现比较麻烦,直接按照UIWebView那种加载方法会发现在真机上显示不出来(网上有人说在模拟器上可以,有人说在真机上获取的路径有问题),用WKWebView实现的需要借助GCDWebServer,就是先在沙盒某一个目录下设置服务的根目录,将选择的图片或视频复制一份到沙盒目录某文件夹下,然后通过
http://localhost/xxx
这样的方式去找到复制的图片或者视频,之后再调用JS方法,将选择的图片或视频的全路径分别放置<img>
或<video>
标签的src
中就可以,就可以显示了。需要用的三方库GCDWebServer。
部分代码参考
插入图片和视频的JS方法和上述一致
创建GCDWebSerVer单例
+ (GCDWebServer*)sharedInstance
{
static GCDWebServer *_sharedInstance = nil;
static dispatch_once_t onceToken;
dispatch_once(&onceToken, ^{
_sharedInstance = [[GCDWebServer alloc] init];
NSString *documentPath = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory,
NSUserDomainMask,
YES) objectAtIndex:0];
[_sharedInstance addGETHandlerForBasePath:@"/" directoryPath:documentPath indexFilename:nil cacheAge:3600 allowRangeRequests:YES];// 此处设置本地服务器根目录
});
return _sharedInstance;
}
开启监听
//本地服务开始监听
if (![[GCDWebServerUtils sharedInstance] isRunning]) {//如果当前还在运行的话就不在启动了
[[GCDWebServerUtils sharedInstance] startWithPort:80 bonjourName:nil];
}
综上,WKWebView加载的HTML中就再插入本地视频标签
<video>
和图片标签<img>
就可以正常显示了。
网友评论