将数据从java类传递到Web View html

时间:2012-08-01 03:08:58

标签: android html android-webview

我正在webView

中的html下面加载

https://mail-attachment.googleusercontent.com/attachment/?ui=2&ik=25c0c425c6&view=att&th=138db54ff27ad34b&attid=0.1&disp=inline&realattid=f_h5ahtmbe0&safe=1&zw&saduie=AG9B_P9YNooGjsk_jLefLptQ9q15&sadet=1343790299575&sads=-yBVsLKP_2mh7zMfYLCF7sL1u-w

现在我要做的是填充来自我的java类变量的html中的文本框,然后自动点击提交。

但我不知道该怎么做。

任何人都会受到赞赏。

5 个答案:

答案 0 :(得分:43)

首先,您的网址似乎无法使用。

如果您想在Android应用和您的网络应用/网页之间进行数据交换,您可以通过javascript实现此目的。

以下是Android官方网站的示例:

创建一个这样的类:

public class JavaScriptInterface {
    Context mContext;

    /** Instantiate the interface and set the context */
    JavaScriptInterface(Context c) {
        mContext = c;
    }

    /** Show a toast from the web page */
    @JavascriptInterface
    public void showToast(String toast) {
        Toast.makeText(mContext, toast, Toast.LENGTH_SHORT).show();
    }
}

WebView

WebView webView = (WebView) findViewById(R.id.webview);
webView.addJavascriptInterface(new JavaScriptInterface(this), "Android");

在您的网页中:

<input type="button" value="Say hello" onClick="showAndroidToast('Hello Android!')" />

<script type="text/javascript">
    function showAndroidToast(toast) {
        Android.showToast(toast);
    }
</script>

如果您想将某些内容传递到您的网页,只需调用相应的javascript函数:

String str = "xxx";
myWebView.loadUrl("javascript:xxx('"+str+"')");

这是参考: http://developer.android.com/guide/webapps/webview.html

答案 1 :(得分:17)

我想补充说,加载html时应该完成javascript函数的加载。要控制它,您可以使用以下内容:

webview.getSettings().setJavaScriptEnabled(true);
webview.loadUrl("file:///android_asset/test.html");
webview.setWebViewClient(new WebViewClient(){
    public void onPageFinished(WebView view, String url){   
        webview.loadUrl("javascript:init('" + theArgumentYouWantToPass + "')");
    }           
});

的test.html

<!DOCTYPE html>
<html>
<head>
    <title>Test</title>
</head>

<body>
hola
adios
</body>

<script type="text/javascript">

    function init(val){
// Do whatever you want with your parameter val
    }
</script>
</html>

取自Uncaught ReferenceError: myFunction is not defined at null:1 Android exception in webview

答案 2 :(得分:3)

请注意,要像这样调用javascript函数,str可能包含单引号或其他特殊字符。

String str = "xxx";
myWebView.loadUrl("javascript:xxx('"+str+"')");

我建议在base64中编码str,并在javascript端对其进行解码。

  • Android

    String str = "xxx";
    //encode in base64
    String base64Str = Base64.encodeToString(str.getBytes(), Base64.NO_WRAP);
    myWebView.loadUrl("javascript:xxx('"+ base64Str +"')");
    
  • Javascript

    function xxx(val) {
        //decode from base64
        var str = atob(data)
    }
    

答案 3 :(得分:0)

只需启用DomStorage并编写&#34; var x =&#34;字符串:

import javax.swing.*;
import java.awt.*;
import java.awt.GridLayout;
import java.awt.BorderLayout;
import javax.swing.BorderFactory;
import java.awt.event.*;
import java.util.*;
import java.io.*;
import java.util.*;
import javax.swing.JFrame;
import java.awt.Dimension;
public class Gui extends JFrame
{
    private JLabel lab1,lab2;
    private JButton butt1,butt2;
    private JPanel p1,p2;
    public static void main(String[] args)
    {
        Gui okno = new Gui();
        //vytáhne z defaultního monitoru width a height
        Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize();
        int width = (int) screenSize.getWidth();
        int height = (int) screenSize.getHeight();
        //velikost okna
        Dimension appSize = new Dimension(210,250);
        okno.setPreferredSize(appSize);
        //nastavení na stred
        okno.setLocation((width/2)-105,(height/2)-125);
        okno.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        okno.setVisible(true);
        //okno.setLocationRelativeTo(null); todle dá do středu obrazovky jen první body x a y od kterejch se to odvíjí
        okno.setResizable(false);
        okno.pack();

    }

    public Gui(){
       super("Jméno hry vole");       
       setLayout(new BorderLayout(20,20));
       /////////////////////////////////////////////////////////////////
       // p1
       p1 = new JPanel();
       add(p1,BorderLayout.NORTH);
       lab1 = new JLabel("Welcome",SwingConstants.CENTER); //centr labelu
       lab2 = new JLabel("Created by DECHKR",SwingConstants.CENTER); //centr labelu
       lab1.setFont(new Font("Serif", Font.PLAIN, 36)); //velikost fontu
       p1.add(lab1);
       //p2
       p2 = new JPanel(new GridLayout(2,1,0,5));
       add(p2,BorderLayout.SOUTH);

       Dimension d = new Dimension(210,75);
       butt1 = new JButton("Login");
       butt1.setPreferredSize(d);
       butt2 = new JButton("Register");
       butt2.setPreferredSize(d);
       p2.add(butt1);
       p2.add(butt2);


          butt1.addActionListener(new ActionListener(){
             public void actionPerformed(ActionEvent evt){
                //Gui okno = new Gui();
                //System.exit(0);  endne celej jvm proces



             }

         });

         butt2.addActionListener(new ActionListener(){
             public void actionPerformed(ActionEvent evt){


             }

         });
}

答案 4 :(得分:0)

直接在网址中传递参数

webView.loadUrl("file:///android_asset/animation.html?message=testing");

html文件中获取参数

var url_string = window.location.href
var url = new URL(url_string);
var message= url.searchParams.get("message");