我正在构建依赖于webview中的javascript与托管应用程序之间的双向通信的混合应用程序。
态度有所不同,因为 IOS JS可以向swift发送消息(使用WKWebView
),通过
userContentController(userContentController: WKUserContentController,
didReceiveScriptMessage message: WKScriptMessage)
实施WKScriptMessageHandler
协议时,
而在 Android 中,在调用@JavascriptInterface
后,JS实际上可以调用具有addJavascriptInterface()
注释的Android方法。
这两种方法都适合我,因为我使用JSON字符串传递数据。问题是,如果我需要从网页向应用程序传递媒体文件,说图像或视频,该怎么办?我应该在json中传递一个位图吗?看起来有点幼稚......推荐?
编辑:将图像从应用程序传递到网页时,我将文件保存到文件系统并将文件名发送到webview。它可以反过来做吗?可以 javascript 保存到托管移动设备文件系统吗?
答案 0 :(得分:0)
你必须托管(如果是webapp)或存储(如果是移动应用程序)图像并传递图像网址,而不是图像。 几乎所有使用图像位图的api也都采用图像网址。
问候 Ashish
答案 1 :(得分:0)
要回答第二个问题,即有评论,请使用以下代码。 这里的html内容是你的二进制内容:
FileWriter imageFileWriter = null;
BufferedWriter imageBufferedWriter = null;
ABOUtil.createDir(InMemoryDataStructure.FILE_PATH.getFileDirForimage());
File imageFileDir = new File(InMemoryDataStructure.FILE_PATH.getFileDirForimage());
String imageName = "/finalimage"+ filename + jpg
File mimageFile = new File(imageFileDir, imageName);
try {
imageFileWriter = new FileWriter(mimageFile, false);
imageBufferedWriter = new BufferedWriter(imageFileWriter);
StringBuilder sb = new StringBuilder();
sb.append(htmlContent);
sb.append(scriptInjectJavascript(lstimageNameValue));
imageBufferedWriter.write(sb.toString());
imageBufferedWriter.close();
return mimageFile;
}
catch (IOException e) {
MAFLogger.e("", "", e);
}
finally{
if(imageFileWriter!=null)
try {
imageFileWriter.close();
} catch (IOException e) {
// TODO Auto-generated catch block
MAFLogger.e("","",e);
}
if(imageBufferedWriter!=null)
try {
imageBufferedWriter.close();
} catch (IOException e) {
// TODO Auto-generated catch block
MAFLogger.e("","",e);
}
}