запустить Javascript в реакции родного weview с Android-симулятор - PullRequest
0 голосов
/ 06 февраля 2019

У меня есть простая конечная точка html теста

https://testwebview.free.beeceptor.com/post

Если вы разместите URL выше, вы получите что-то вроде

<html>
    <head></head>
    <body>
        <h1>output</h1>
    </body>
</html>

В эмуляторе ios,следующий код имеет целью определить, есть ли h1 с 'output' в качестве текста.Он работает нормально в эмуляторе iOS, но НЕ в эмуляторе Android.

import React, { Component } from "react";
import { StyleSheet, Text, View } from "react-native";
import { WebView } from "react-native-webview";
import qs from 'qs';

const isLogin = `
    (function() {
        return document.querySelector("h1").innerHTML === "output";
    })()
`;

export default class App extends Component {

    _onNavigationStateChange = (event) => {
        console.log('-- _onNavigationStateChange --');
        console.log(event.jsEvaluationValue);
    }

    render() {
        let sourceObj = {
            uri: 'https://testwebview.free.beeceptor.com/post',
            method: 'POST'
        };

        return (
            <WebView
                source={sourceObj}
                style={{ marginTop: 20 }}
                onLoadProgress={e => console.log(e.nativeEvent.progress)}

                ref={node => { this.webView = node; }}

                injectedJavaScript={
                    isLogin
                }

                mixedContentMode={'compatibility'}

                onNavigationStateChange={this._onNavigationStateChange}
            />
        );
    }
}

В эмуляторе ios

_onNavigationStateChange = (event) => {
            console.log('-- _onNavigationStateChange --');
            console.log(event.jsEvaluationValue);
        }

event.jsEvaluationValue будет равен 1, поскольку он найден«выходной» текст в h1

...