WebView的使用

转载自:http://www.cnblogs.com/soaringEveryday/p/4495221.html

这里讲下js和java的互调


java代码

public class MainActivity extends Activity {

	private WebView mWebView;

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		showWebView();
	}

	private void showWebView() {

		// webView与js交互代码
		try {
			mWebView = new WebView(this);
			setContentView(mWebView);

			mWebView.requestFocus();
			// 必须设置WebChromeClient
			mWebView.setWebChromeClient(new WebChromeClient() {});

			mWebView.setOnKeyListener(new View.OnKeyListener()
			{
				@Override
				public boolean onKey(View v, int keyCode, KeyEvent event) {
					if (keyCode == KeyEvent.KEYCODE_BACK
							&& mWebView.canGoBack()) {
						mWebView.goBack();
						return true;
					}
					return false;
				}
			});

			WebSettings webSettings = mWebView.getSettings();
			// 必须支持JavaScriptEnabled
			webSettings.setJavaScriptEnabled(true);
			webSettings.setDefaultTextEncodingName("utf-8");
			// 给html提供java 的对象,必须在loadUrl之前调用
			mWebView.addJavascriptInterface(getHtmlObject(), "jsObj");
			mWebView.loadUrl("file:///android_asset/test.html");
		} catch (Exception e) {
			e.printStackTrace();
		}

	}

	private Object getHtmlObject() {
		Object insertObj = new Object() {
			// 4.2后,必须加@JavascriptInterface,不加js调用不了
			@JavascriptInterface
			public String HtmlcallJava() {
				return "Html call Java haha";
			}
			@JavascriptInterface
			public String HtmlcallJava2(final String param) {
				return "Html call Java : " + param;
			}
			@JavascriptInterface
			public void JavacallHtml() {
				runOnUiThread(new Runnable() {
					@Override
					public void run() {
						// java 调用js代码
						mWebView.loadUrl("javascript: showFromHtml()");
					}
				});
			}
			@JavascriptInterface
			public void JavacallHtml2() {
				runOnUiThread(new Runnable() {
					@Override
					public void run() {
						mWebView.loadUrl("javascript: showFromHtml2('aaa')");
					}
				});
			}
		};

		return insertObj;
	}
}
js

	<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
	<!-- saved from url=(0032)http://localhost:8080/jsandroid/ -->
		<html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
		<meta http-equiv="Expires" content="0">
		<meta http-equiv="Pragma" content="no-cache">
		<meta http-equiv="Cache-Control" content="no-store,no-cache">
		<meta name="Handheldfriendly" content="true">
		<meta name="viewport" content="width=100%; initial-scale=1.0; user-scalable=yes">
		<meta name="robots" content="all">
		<meta name="keywords" contect="doodle, mobile, doodlemobile, game, games">
		<meta name="description" content="Make People's Mobile Life More Connected Through Games.">
		<title>jsandroid_test</title>
		<script type="text/javascript" language="javascript"> 
			function showHtmlcallJava(){
					var str = window.jsObj.HtmlcallJava();
					alert(str);
				}
			function showHtmlcallJava2(){
				var str = window.jsObj.HtmlcallJava2("HtmlcallJava2 hehe");
				alert(str);
				}
			function showFromHtml(){
					document.getElementById("id_input").value = "Java call Html";
				}
			function showFromHtml2( param ){
				document.getElementById("id_input2").value = "Java call Html : " + param; 
				}
		</script>
		</head>
		<body>
		我是html
		<br>
		<br>
		<br>
		<input type="button" value="HtmlcallJava" onclick="showHtmlcallJava()" />
	<br>
		<input type="button" value="HtmlcallJava2" onclick="showHtmlcallJava2()" />
		<br>
		<br>
		<br>
		<br>
		<input id="id_input" style="width: 90%" type="text" value="null" />
		<br>
		<input type="button" value="JavacallHtml" onclick="window.jsObj.JavacallHtml()" />
		<br>
		<br>
	<br>
		<input id="id_input2" style="width: 90%" type="text" value="null" />
		<br>
		<input type="button" value="JavacallHtml2" onclick="window.jsObj.JavacallHtml2()" />
</body>
		</html>




### Android WebView 使用教程 #### 什么是 WebView? `WebView` 是 Android 提供的一个控件,用于在应用内部加载和展示网页内容。它允许开发者嵌入 HTML 页面到应用程序中,并支持 JavaScript 和 CSS 的执行。 --- #### 基本初始化与配置 要使用 `WebView`,首先需要在布局文件中定义该组件: ```xml <WebView android:id="@+id/webView" android:layout_width="match_parent" android:layout_height="match_parent"/> ``` 接着,在 Activity 或 Fragment 中获取并初始化 `WebView` 实例: ```java import android.os.Bundle; import android.webkit.WebSettings; import android.webkit.WebView; public class MainActivity extends AppCompatActivity { private WebView webView; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); webView = findViewById(R.id.webView); // 启用JavaScript支持 WebSettings settings = webView.getSettings(); settings.setJavaScriptEnabled(true); // 加载URL webView.loadUrl("https://www.example.com"); } } ``` 上述代码展示了如何启用 JavaScript 支持以及加载指定 URL[^1]。 --- #### 数据提交 (POST 请求) 如果需要通过 POST 方法向服务器发送数据,则可以使用以下方式: ```java String postData = "username=admin&password=secret"; webView.postUrl("https://example.com/login", EncodingUtils.getBytes(postData, "base64")); ``` 注意:这里的数据编码应遵循目标服务端的要求[^2]。 --- #### 处理 Cookies 为了处理 cookies,可以通过 `CookieManager` 设置或读取 cookie: ```java import android.webkit.CookieManager; // 添加Cookie CookieManager.getInstance().setCookie("https://example.com", "name=value"); // 获取所有Cookies String allCookies = CookieManager.getInstance().getCookie("https://example.com"); System.out.println(allCookies); ``` 此部分操作有助于保持用户的登录状态或其他个性化设置。 --- #### 清除缓存与历史记录 当用户退出或者切换账户时,可能需要清理 WebView 缓存及相关信息: ```java // 清楚缓存 webView.clearCache(true); // 删除历史记录 webView.clearHistory(); // 移除基本认证凭证 webView.removeJavascriptInterface("interfaceName"); // 如果存在敏感数据存储需求,可进一步调用清除函数 webView.clearFormData(); ``` 需要注意的是,移除 Java 对象接口可能会因不同版本的 Android 而表现不一致^。 --- #### 高级特性 除了基础功能外,`WebView` 还具备更多高级选项,比如手势识别、离线浏览模式等。这些都可以通过调整其设置来实现[^4]: ```java WebSettings webSettings = webView.getSettings(); webSettings.setDomStorageEnabled(true); // 开启DOM storage API webSettings.setDatabaseEnabled(true); // 允许数据库API webSettings.setAppCacheEnabled(true); // 启动应用缓存 webSettings.setLayoutAlgorithm(WebSettings.LayoutAlgorithm.SINGLE_COLUMN); // 自适应屏幕宽度 ``` 然而值得注意的一点是,对于 H5 AJAX 请求无法直接拦截修改响应头等内容[^5]。因此某些场景下需借助外部工具完成更复杂的交互逻辑。 --- ### 总结 以上介绍了关于 Android 平台下的 WebView 组件的基础运用技巧及其扩展能力。希望对你有所帮助!
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值