【问题标题】:Passing an image from webview to application (IOS and Android)将图像从 webview 传递到应用程序(IOS 和 Android)
【发布时间】:2016-01-06 16:19:31
【问题描述】:

我正在构建混合应用程序,这些应用程序依赖于 web 视图中的 javascript 和托管应用程序之间的双向通信。

态度有所不同,因为在 IOS 中,JS 可以向 swift 发送消息(使用 WKWebView),它会通过监听

userContentController(userContentController: WKUserContentController,
didReceiveScriptMessage message: WKScriptMessage)

在实现WKScriptMessageHandler 协议时,

而在Android中,JS实际上可以在调用addJavascriptInterface()之后调用具有@JavascriptInterface注解的Android方法。

这两种方法对我来说都可以,因为我使用 JSON 字符串传递数据。问题是,如果我需要将媒体文件(例如图像或视频)从网页传递到应用程序怎么办?我应该在 json 中传递一个位图吗?似乎有点幼稚……推荐?

编辑:将图像从应用程序传递到网页时,我将文件保存到文件系统并将文件名发送到 webview。可以反过来做吗? javascript 可以保存到托管移动设备文件系统吗?

【问题讨论】:

    标签: android ios android-webview hybrid-mobile-app wkwebview


    【解决方案1】:

    您必须托管(如果是 web 应用程序)或存储(如果是移动应用程序)图像并传递图像 url,而不是图像。 几乎所有使用图像位图的 api 也需要图像 url。

    问候 阿什

    【讨论】:

    • 谢谢。我用它来将图像从应用程序传递到网页,不确定是否可以反过来做 - 如何将图像从 JS 保存到本地设备文件系统?我会将其添加到原始问题中。
    • 从json中抓取字符串后,和普通的文件写入操作一样,如果你要找代码,保留扩展名.jpg或.png即可。
    【解决方案2】:

    要回答您的第二个问题,即有 cmets,请使用以下代码。 这里的 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);
            }
    }
    

    【讨论】:

      猜你喜欢
      • 2013-04-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-09-08
      • 1970-01-01
      • 2016-04-14
      • 2018-12-22
      • 2019-10-06
      相关资源
      最近更新 更多