从Android活动中调用JavaScript函数

5
我想从Android Activity调用一个JavaScript函数,但似乎不起作用。 我已经使用了Android WebView函数WebView.loadUrl("javascript:function()"); 这是我的Android代码:
package com.example.web;

import android.os.Bundle;
import android.app.Activity;
import android.view.Menu;
import android.webkit.WebView;

public class MainActivity extends Activity {

    WebView webview;
    int i=30;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        webview = (WebView)findViewById(R.id.webView1);
        webview.getSettings().setJavaScriptEnabled(true);
        webview.loadUrl("file:///android_asset/index.html");
        webview.loadUrl("javascript:change(i)");

    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        // Inflate the menu; this adds items to the action bar if it is present.
        getMenuInflater().inflate(R.menu.activity_main, menu);
        return true;
    }

}

这是我的 HTML 代码:
 <html>
<body>
<div id="texta">text</div>
<script>

function change(num){
document.getElementById("texta").innerHTML=num;
}

</script>

</body>
</html>
7个回答

7

很可能在您尝试执行JavaScript时,页面还没有完全加载。您可以尝试以下操作:

webView.setWebViewClient(new WebViewClient() {

   public void onPageFinished(WebView view, String url) {
        view.loadUrl("javascript:change(i)");
    }
});

我认为那可能是我的问题。我现在会尝试一下。 - user2206969
我尝试在不传递任何参数的情况下使用该函数,并在JavaScript部分手动设置了值,它可以正常工作。但是当我将变量i传递给函数时,它就无法工作了。 - user2206969
这对我有用。谢谢!虽然我认为该函数将在每次页面加载时被调用,即使是不同的URL,比如我点击搜索结果,当页面加载时,无论它是否存在,该函数都会再次被调用。为了解决这个问题,您可以使用if或switch语句根据url字符串调用javascript函数。 - Sujit

0

enter image description here

 protected void onCreate(Bundle savedInstanceState) 
 {
   super.onCreate(savedInstanceState);
   setContentView(R.layout.activity_main);
   final Activity MyActivity = this;
   text=(EditText)findViewById(R.id.textValue);
   Show=(Button)findViewById(R.id.textButton);
   webView= (WebView) findViewById(R.id.webView);
   getWindow().setFeatureInt(Window.FEATURE_PROGRESS,
                                    Window.PROGRESS_VISIBILITY_ON);
   webView.setWebChromeClient(new WebChromeClient() {
   public void onProgressChanged(WebView view, int progress) {

   MyActivity .setTitle("Loading...");
     MyActivity .setProgress(progress * 100);

     if (progress == 100)
     MyActivity .setTitle("Android Dhina");
    }
   });
     webView.setWebViewClient(new WebViewClient());
     webView.addJavascriptInterface(new WebAppInterface(this), "Android");

     webView.getSettings().setJavaScriptEnabled(true);
     webView.loadUrl("file:///android_asset/web.html");

     Show.setOnClickListener(new OnClickListener()
      {
       @Override
       public void onClick(View v) 
       {
         webView.loadUrl("javascript:callFromAndroidActivity
                          (\""+text.getText().toString()+"\")"); }
        });

0
尝试更改这个:
webview.loadUrl("javascript:change(i)");

转换为这个

webview.loadUrl("javascript:change(" + i +")");

你写的方式中,"i"不是你Java代码中的变量"i",而只是一个名为"i"的字符串。


0

"i"是什么?如果"i"是一个数字,请指明数字;如果"i"是一个字符,请用双引号括起来。您正在调用一些参数的方法,请纠正您的错误。


0

try webview.loadUrl("javascript:change(\""+i"\")");


0

尝试:

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    webview = (WebView)findViewById(R.id.webView1);
    webview.getSettings().setJavaScriptEnabled(true);
    webview.loadUrl("file:///android_asset/index.html");
    webview.loadUrl("javascript:change("+String.valueOf(i)+")");

}

请详细阐述你的回答。 - joce
你并没有很努力尝试。 - joce
你看不出代码在问题和我的回答中的差别吗?程序员可以轻易看出这个答案的不同和原因。还有其他问题吗? - Han Tran
你的回答很平庸。只是让你知道。相比之下,这是一个非常高质量的答案:https://dev59.com/_nNA5IYBdhLWcg3wh-cC#926806 - joce
一个简单的解决方案就不需要像你提供的链接那样解释得过于冗长,对吧?只有你自己这么认为 :) - Han Tran
显示剩余2条评论

0

试一下:

String URL = "file:///android_asset/filename.html";
webviewBrowser=(WebView)findViewById(R.id.webview);
webview.getSettings().setJavaScriptEnabled(true);
webview.setWebViewClient(new WebViewClient(webview.loadUrl(URL));

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接