Загрузить файл в Nativescript Webview с помощью iframe - PullRequest
0 голосов
/ 04 июля 2018

Моя проблема в том, что у меня есть одно веб-представление, содержащее динамическую форму или форму, которая создается динамически с WP Builders и включена в iframe, и я хочу выбрать файл из приложения в nativescript, это не позволит мне выбрать файл.

Итак, я хочу попробовать

Как загрузить файлы в веб-просмотр с помощью собственного скрипта

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

Но проблема в том, что форма является динамической, есть ли скрипт, который будет определять событие щелчка для ввода файла внутри фрейма, а также указывать путь к файлу при выборе файла, если мы можем обнаружить событие для щелчка ввода файла.

Другая проблема заключается в том, что если в динамической форме вводится несколько файлов

1 Ответ

0 голосов
/ 07 июля 2018

Я получил ответ от реализации WebChromeClient в Android

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

и класс 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);
            });
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...