使用場(chǎng)景
加載在線網(wǎng)頁(yè),需要在網(wǎng)頁(yè)加載完成之后,通過(guò)js注入的方式,對(duì)其中的部分元素進(jìn)行屬性的修改.這里的示例是使用本地的網(wǎng)頁(yè)進(jìn)行修改罐孝。在線的使用同樣的方式處理.###
html源代碼
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>WebView</title>
<style type="text/css">
body {
background: #cbcc1a;
}
.btn {
line-height: 40px;
margin: 10px;
background: #cccccc;
}
.logo {
height: 100px;
background: aqua;
}
</style>
</head>
<body>
<h2>WebView</h2>
<div id="input1"><span class="inp1">請(qǐng)輸入要傳遞的值:</span><input type="text" id="input"></div>
<div id="btn"><span class="btn">點(diǎn)我</span></div>
<div class="logo">
</div>
<script type="text/javascript">
var btnEle = document.getElementById("btn")
var inputEle = document.getElementById("input")
btnEle.addEventListener("click", function () {
var value = inputEle.value
// alert(value)
/*調(diào)用java代碼*/
if (window.zyJsLuncher != null) {
window.zyJsLuncher.setValue(value);
}
})
</script>
</body>
</html>
activity中的代碼(xml省略)
WebView webView;
private WebSettings mWebViewSettings;
@Override
public void initView() {
mWebViewSettings = webView.getSettings();
initNew();
mWebViewSettings.setJavaScriptEnabled(true);
/*打開允許調(diào)試的開關(guān)*/
webView.setWebContentsDebuggingEnabled(true);
webView.loadUrl("file:///android_asset/index2.html");
}
private void initNew() {
mWebViewSettings.setJavaScriptEnabled(true);
mWebViewSettings.setUseWideViewPort(true);
mWebViewSettings.setLoadWithOverviewMode(true);
mWebViewSettings.setAllowFileAccess(true);
mWebViewSettings.setSupportZoom(true);
mWebViewSettings.setJavaScriptCanOpenWindowsAutomatically(true);
try {
if (Build.VERSION.SDK_INT >= 16) {
Class<?> clazz = mWebViewSettings.getClass();
Method method = clazz.getMethod("setAllowUniversalAccessFromFileURLs", boolean.class);
if (method != null) {
method.invoke(mWebViewSettings, true);
}
}
} catch (Exception e) {
e.printStackTrace();
}
mWebViewSettings.setPluginState(WebSettings.PluginState.ON);
mWebViewSettings.setDomStorageEnabled(true);// 必須保留,否則無(wú)法播放優(yōu)酷視頻肥缔,其他的OK
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
mWebViewSettings.setMixedContentMode(mWebViewSettings.MIXED_CONTENT_ALWAYS_ALLOW);
}
webView.setWebViewClient(webViewClient);
}
private WebViewClient webViewClient = new WebViewClient() {
@Override
public boolean shouldOverrideUrlLoading(WebView view, String url) {
view.loadUrl(url);
return true;
}
@Override
public void onPageFinished(WebView view, String url) {
/**
* js注入
*/
injectJsSample2();
}
};
private void injectJsSample2() {
String tmp = "javascript: function sayHi() { " +
" var element1 = document.getElementById(\"input1\");\n" +
" element1.style.height = \"150px\";\n" +
" element1.style.background = \"green\";\n" +
"}";
// 先注入1
webView.loadUrl(tmp);
String tmp2 = "javascript: function f2() {\n" +
" var ip1Ele = document.getElementsByClassName(\"inp1\")[0];\n" +
" ip1Ele.style.color = \"white\";\n" +
" ip1Ele.style.fontSize = \"35px\";\n" +
" }";
// 先注入1
webView.loadUrl(tmp2);
// 然后再調(diào)用
// webView.loadUrl("javascript: onload(sayHi());");
// 因?yàn)閖s已經(jīng)注入了莲兢,就可以直接調(diào)用了
webView.loadUrl("javascript: sayHi();");
webView.loadUrl("javascript: f2();");
}