【问题标题】:Calling JavaScript function in WebView在 WebView 中调用 JavaScript 函数
【发布时间】:2013-03-07 20:52:21
【问题描述】:

我知道这个问题已经被问过很多次了,我已经检查了所有的解决方案并研究了所有内容。但是,这根本不适合我。

我不知道我做错了什么。有人可以帮帮我吗?

我正在我的WebView 中加载一个本地 html 文件,然后调用 JavaScript 函数:

wv.loadUrl("file:///android_asset/sample.html");
wv.getSettings().setJavaScriptEnabled(true);
JavascriptInterface javasriptInterface = new JavascriptInterface(MyActivity.this);
wv.addJavascriptInterface(javasriptInterface, "MyInterface");
wv.loadUrl("javascript:loadpath()");

HTML 文件是:

<html>
<head>
</head>

<body>
<script type="text/javascript">
    function callDoSomething() {
        // Do something
    }

    function loadpath() {
        // Is not called no matter whatever operation I do here. Just printing a string, setting variable, android callback anything.
        document.write("Hi");
        document.getElementById('img').src = "path.png";
    }
</script>

<form name="myForm" action="FORM">
    <img src=""  alt="Autofill" /><br>
    <input type="button" value="Submit" onClick="callDoSomething()" />
</form>

</body>
</html>

【问题讨论】:

    标签: javascript android function android-webview


    【解决方案1】:

    loadUrl() 是异步的。你打电话给你的第二个loadUrl() way 太快了。您需要等到您的页面加载完毕,或许可以使用WebViewClient 并注意onPageFinished()

    【讨论】:

    • 哦!感谢您提供的信息。实际上我的要求是将参数传递给 HTML 页面。起初我在第一个 loadUrl 路径中尝试了字符串查询。但是,它给出了一个网页未找到错误,搜索后找到了这个方法。无论如何,我将尝试使用 WebViewClient 实现 onPageFinished()。非常感谢!
    • @Rachit:是的,您不能在本地路径上使用查询参数,只能在 Web URL 上使用。但是,请记住,您的 JavaScript 代码可以通过在 JavascriptInterface 上公开的方法回调到您的应用程序以检索此数据,并且您的脚本可以通过在 MyInterface 上的调用检索此数据。您不需要再次调用loadUrl() -- 让脚本数据,而不是推送数据。
    • 是的,我没想到。但是在性能方面,哪种方法会更快?对于单个参数,它们中的任何一个都应该可以。但是,如果我必须在不同时间交换多个参数,是否需要权衡?
    • @RachitL:“但是,如果我必须在不同时间交换多个参数,是否需要权衡?” -- 欢迎您同时使用这两种技术。例如,这个示例项目显示了通过 loadUrl("javascript:...") 推送位置和拉取位置:github.com/commonsguy/cw-omnibus/tree/master/WebKit/GeoWeb2
    猜你喜欢
    • 2013-06-06
    • 2011-05-18
    • 2017-10-15
    • 1970-01-01
    • 2011-08-12
    • 1970-01-01
    • 1970-01-01
    • 2019-05-31
    • 1970-01-01
    相关资源
    最近更新 更多