Не удается найти переменную: function () с помощью метода JavaScript ("function ()") в WKWebview и реагировать js - PullRequest
0 голосов
/ 29 апреля 2020

Я занимаюсь разработкой гибридного приложения, которое использует WKWebview и React js (хуки). Мне нужно отправить идентификатор пользователя в Интернет с Ios. (Javascript -> IOS). Я пытаюсь сделать это, используя метод оценки JavaScript ().

, метод будет работать, если я поставлю моя функция в теге index. html, она не будет работать, если я добавлю ее в компонент. будет возвращена ошибка

Необязательно (Ошибка домена = Код WKErrorDomain = 4 "JavaScript произошла ошибка" UserInfo = {WKJavaScriptExceptionLineNumber = 0, WKJavaScriptExceptionMessage = TypeError: undefined не является функцией, WKJavaScriptExceptionColumnNumber = 0 , NSLocalizedDescription = JavaScript произошла ошибка})

На моей IOS стороне didFini sh навигация (WKWebviewController)

func webView(_ webView: WKWebView, didFinish navigation: WKNavigation!) {
    //success
    let myJsFuncName1 = "getUserIdFromNativeOnIndexHtml('jack123')"
    self.webview.evaluateJavaScript(myJsFuncName1) { (result, error) in
    if let result = result{ print(result) }else{
        print("error2",error)
    } }

    //fail
    let myJsFuncName2 = "getUserIdFromNativeOnTheComponentJS('clever123')"
    self.webview.evaluateJavaScript(myJsFuncName2) { (result, error) in
    if let result = result{ print(result) }else{
        print("error3",error)
    } }
}

Javascript

в индексе. html

///this will work
<script type="text/JavaScript" charset="UTF-8">
function getUserIdFromNativeOnIndexHtml(id) {
                    alert('user is ' + id + '!!');
                }
            </script>

myCouponList. js

function MyCouponList(props) {
const classes = useStyles(props);


function getUserIdFromNativeOnTheComponentJS(id) {
    alert('user is ' + id + '!!');
}


return (
    <>
        <header className={classes.header}>
            <div className={classes.header__header_column}>
                <button
                    type="button"
                    className={classes.header_backButton}
                    onClick={() => window.webkit.messageHandlers.goBackButton.postMessage('goBackButton')}
                >
                    <img src="/assets/images/banto/backButton.png" alt="backButton" />
                </button>{' '}
            </div>{' '}
            <div className={classes.header__header_column}>
                <h1 className={classes.header__title}> 쿠폰 </h1>{' '}
            </div>{' '}
            <div className={classes.header__header_column}>
                <span className={classes.header__icon}>
                    <i className="fas fa-search"> </i>{' '}
                </span>
                <span className={classes.header__icon}>
                    <i className="fas fa-cog"> </i>{' '}
                </span>{' '}
            </div>{' '}
        </header>{' '}
        {}....

Я хочу сохранить идентификатор пользователя в редукторе для выполнения вызова API.

...