Как я могу разобрать содержимое веб-просмотра? - PullRequest
0 голосов
/ 05 апреля 2019

Мне нужно разобрать контент из webview в моем приложении, возможно ли это?Теперь я могу получить только страницу URL.

Я пытался найти содержимое в объекте LoadFinished, но не нашел

Компонент WebView:

<template>
    <Page class="webview-page">
        <ScrollView>
            <WebView height="100%" src="https://www.fl.ru/login/"
                @loadFinished="parsePage" />
        </ScrollView>
    </Page>
</template>
<script>
    export default {
        methods: {
            parsePage(webargs) {
                //I need gets content here
                console.log(webargs.url);
            }
        },

        data() {
            return {};
        }
    };
</script>

Я ожидаю получить весь HTML-контентсо страницы

1 Ответ

1 голос
/ 08 апреля 2019

Попробуйте это,

<template>
    <Page class="page">
        <ActionBar title="Home" class="action-bar" />
        <GridLayout>
            <WebView src="https://www.nativescript.org/" @loadFinished="onLoadFinished"
                :visibility="visibility"></WebView>
            <ScrollView v-if="html">
                <Label class="h3" :text="html" textWrap="true"></Label>
            </ScrollView>
        </GridLayout>
    </Page>
</template>

<script>
    import {
        device
    } from "platform";

    export default {
        data() {
            return {
                html: ""
            };
        },
        computed: {
            visibility: function() {
                return this.html ? "hidden" : "visible";
            }
        },
        methods: {
            onLoadFinished: function(args) {
                const that = this,
                    webView = args.object,
                    jsStr = "document.body.innerHTML";

                if (webView.ios) {
                    webView.ios.evaluateJavaScriptCompletionHandler(jsStr,
                        function(
                            result,
                            error
                        ) {
                            if (error) {
                                console.log("error...");
                            } else if (result) {
                                that.html = result;
                            }
                        });
                } else if (webView.android) {
                    // Works only on Android 19 and above
                    webView.android.evaluateJavascript(
                        jsStr,
                        new android.webkit.ValueCallback({
                            onReceiveValue: function(html) {
                                that.html = html;
                            }
                        })
                    );
                }
            }
        }
    };
</script>

Если вам нравится поддержка более старых версий Android (API уровня 17 и 18), реализация становится немного сложной. Вам нужно будет реализовать интерфейс @JavascriptInterface, который может быть написан только на Java. Уже сообщается о проблеме, связанной с включением возможности Java-аннотации из JavaScript . Возможно, вам придется написать проект библиотеки Android, в котором вы реализуете @JavascriptInterface и используете его для отслеживания контента, как объяснено здесь .

Образец игровой площадки

...