简体   繁体   English

使用iframe在Nativescript Webview中上传文件

[英]Upload File in Nativescript Webview with iframe

My problem is I have one webview Containing Dynamic Form or form which is created dynamic with WP Builders and that is included in iframe and i want to select file from application in nativescript this will not allow me select file. 我的问题是我有一个包含动态表单的Web视图,或者使用WP Builders动态创建的表单,并且包含在iframe中,我想从nativescript应用程序中选择文件,这将不允许我选择文件。

So I want to try 所以我想尝试

How to load files into webview in native script 如何使用本机脚本将文件加载到Webview中

http://shripalsoni.com/blog/nativescript-webview-native-bi-directional-communication/ http://shripalsoni.com/blog/nativescript-webview-native-bi-directional-communication/

But problem is form is dynamic is there any script which will detect click event of file input inside frame and also put file path to it when file is selected if we can detect event for file input click. 但是问题是形式是动态的,如果我们可以检测到文件输入单击事件,是否有任何脚本会检测框架内文件输入的单击事件,并在选择文件时将文件路径放置到该脚本。

another issue is what if there are more than one file input in dynamic form 另一个问题是,如果以动态形式输入了多个文件,该怎么办?

I Got Answer by Implementing WebChromeClient In android 我通过在Android中实现WebChromeClient得到答案

 let webview: WebView = this.webViewRef.nativeElement;
 let myWebChromeClient: MyWebChromeClient = new MyWebChromeClient();
 webview.android.setWebChromeClient(myWebChromeClient);

and class MyWebChromeClient is here 和类MyWebChromeClient在这里

import * as imagepicker from "nativescript-imagepicker";
import * as fs from "file-system";

export class MyWebChromeClient extends android.webkit.WebChromeClient {
    file_path:string;
    constructor() {
        super();

        return global.__native(this);
    }

    onShowFileChooser(webView,filePathCallback,fileChooserParams) {

         this.filepathCallback(filePathCallback);

        return true;
    }

    filepathCallback(filePathCallback)
    {
        let context = imagepicker.create({
            mode: "single",
            mediaType: imagepicker.ImagePickerMediaType.Any
        });
       this.startSelection(context,filePathCallback);
    }

    startSelection(context,filePathCallback) {
        context.authorize().then(() => {
                                    return context.present();
                                  })
            .then((selection) => {
                selection.forEach((selected) => {
                    let path = selected.android;
                    let file = fs.File.fromPath(path);
                    this.file_path = file.path;
                    this.file_path = "file://" + this.file_path;
                    let results = Array.create(android.net.Uri, 1);
                    results[0] = android.net.Uri.parse(this.file_path);

                    filePathCallback.onReceiveValue(results);
                    return this.file_path;
                });
            }).catch(function (e) {
                console.log(e);
            });
    }
}

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM