JavaScript 无法与 android WebView 一起使用,未捕获的引用错误

2024-04-16

我正在尝试使用 WebView 在 Android 上加载 Web 应用程序,但 html 文件中的 JavaScript 无法正确执行。

我创建 WebView 并加载主页,如下所示:

web = new WebView(this);
web.getSettings().setJavaScriptEnabled(true);
web.getSettings().setDomStorageEnabled(true);
JavaScriptInterface jsInterface = new JavaScriptInterface(web, this);
web.setWebChromeClient(new WebChromeClient());
web.addJavascriptInterface(jsInterface, "JSInterface");
web.loadUrl("file:///android_asset/web/home.html");

加载主页后,我单击另一个本地页面的链接,register.html,其中头部有一个 JavaScript 函数

<script type="text/javascript">

    function doRegister() {
        var user = document.getElementById("username").value;
    var email = document.getElementById("email").value;
    var pass = document.getElementById("password").value;
    var confPass = document.getElementById("confirmPassword").value;
    var message = "";

    if (user.length < 6 || user.length > 16) {
        message = message + "Username must be between 6 and 16 characters.<br>";
    }
    if (pass.length < 8 || pass.length > 16) {
        message = message + "Password must be between 8 and 16 characters.<br>";
    }
    if (pass !== confPass) {
        message = message + "Password and confirm password do not match.<br>";
    }
    if (email.indexOf("@") === -1) {
        message = message + "Email address is invalid.<br>";
    }
    if (message === "") {
        message = JSInterface.register(user, email, pass);
        if (message === "") {
            window.location.href = "home.html";
        }
    }

    document.getElementById("message").style.color="red";
    document.getElementById("message").innerHTML=message;
    }
</script>

该函数由按钮 onclick 调用,如下所示

<input id="register" type="button" value="Submit" data-role="button" data-inline="true" data-theme="b" onclick="doRegister()" />

看起来,当单击该按钮时,它正在尝试调用 home.html 上的 doRegister() 。当我点击按钮时我得到Uncaught ReferenceError: doRegister is not defined at file:///android_asset/web/home.html:1

为了确认这一点,我向 home.html 添加了一个 JavaScript 函数,该函数仅显示警报,当我单击 register.html 中的按钮时,该函数确实执行了

对于这个问题的任何帮助将不胜感激。谢谢。

Update:忘了说了,JavaScript 在 Eclipse Web 浏览器和 Firefox 中执行得很好。这是我的 home.html

<!doctype html>
<html>
<head>
    <title>Home</title>
    <meta name="viewport" content="width=device-width, initial-scale=1">
    <link rel="stylesheet" href="http://code.jquery.com/mobile/1.2.0/jquery.mobile-1.2.0.min.css">
    <script src="http://code.jquery.com/jquery-1.8.2.min.js"></script>
    <script type="text/javascript" src="pagination/jquery.simplePagination.js"></script>
    <script src="http://code.jquery.com/mobile/1.2.0/jquery.mobile-1.2.0.min.js"></script>

<script type="text/javascript>
    function doSubmit() {
        alert("test");
    }
</script>


</head>
<body>
    <div data-role="page" id="home">
        <div data-role="header" data-theme="b">
            <h1>Home</h1>
        </div>
        <div data-role="content">
            <ul data-role=listview>
                <li> <a href = professors.html> Browse Professors </a> </li>
                <li> <a> Search Professors </a> </li>
                <li> <a> Browse Course </a> </li>
                <li> <a> Search Course </a> </li>
                <li> <a href = login.html> Login </a> </li>
                <li> <a href = register.html> Register </a> </li>
            </ul>
        </div>
        <div data-role="footer">
            <h4>footer</h4>
        </div>
    </div>
</body>
</html>

基本上 webview 无法找到函数 doRegister() ,正弦函数位于不同的 html 页面 register.html 中,该页面未加载。尝试这个
1.将register.html中的js部分移动到某个.js文件,例如func.js
2.然后从你的 home.html 中引用 func.js 作为

<script type="text/javascript" src="func.js"></script> 

3. 页面加载后,单击按钮应调用 doRegister()

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

JavaScript 无法与 android WebView 一起使用,未捕获的引用错误 的相关文章

随机推荐