最近在开发过程中常常会遇到一些复杂问题,使用Android原生控件比较难解决,使用html在webview中与js交互,在交互过程中约定方法来进行调用,如以下代码:
<script type="text/javascript">
function dyjsfunction(type, params, exParams)
{
if (type == "getNoteInfo")
{
if (type == "getNoteInfo")//约定的方法来获取页面内容
{
var noteInfo = {
"infoTitle":infoTitle.innerHTML,
"infoLinkUrl":infoLink.href,
"infoLinkTitle":infoLink.innerHTML,
"noteContent":noteContent.innerHTML,
};
var sNoteInfo = JSON.stringify(noteInfo);
dynativecode.callWithTypeAndParameterAndExtraParameter(type, sNoteInfo, '');
return sNoteInfo;
}
}
else if (type == "setNoteInfo")/约定的方法来设置页面内容
{
if (params.length > 0)
{
var obj = JSON.parse(params);
infoTitle.innerHTML = obj.infoTitle;
infoLink.href = obj.linkUrl;
infoLink.innerHTML = obj.linkTitle;
noteContent.innerHTML = obj.noteContent;
dynativecode.callWithTypeAndParameterAndExtraParameter(type, 'success', '');
return "success";
}
}
}
</script>
在java类中调用 以mNoteTitle为例:
private static final String WEBVIEW_JSTITLE = "javascript:document.getElementById('JStitleNode').innerHTML='";
mWebView.loadUrl(WEBVIEW_JSTITLE + mNoteTitle + "'");
在约定的JS中会有一个回调:
public void callWithTypeAndParameterAndExtraParameter(final String callType, final String param) {}
在回调中取数据
最后调用JS:
mWebView.loadUrl("javascript:dyjsfunction('getNote', '', '')");