
1 通过webview的didFinishLoad:方法,这个时候webview已经加载完成,可以获得真实高度。
2 通过js来获取实际页面的高度,获取的时机也通过js来监听。
3 通过检测webViewscrollViewcontentSize,只要这个值发生改变,你马上就能够被通知。注册观察者的代码类似这样:
[webViewscrollView addObserver:self forKeyPath:@"contentSize" options:NSKeyValueObservingOptionNew
context:&webViewContext]
然后在观察者中实现- (void)observeValueForKeyPath:(NSString )keyPath ofObject:(id)object change:(NSDictionary )change context:(void )context,你就随时可以监测到webView的高度变化了
涉及js和原生代码相互调用,举个例子,假设现在已经取到用户名和密码,分别的String name,password
那么咱们在html页面写一个js方法,叫做getUserInput
代码就随便写写
function getUserInput(_name,_password){
alert("name is "+_name+" password is "+_password);
}
咱们可以这么在原生传值过去,比如
webviewloadUrl("javascript:getUserInput("+name"+","+password+")");
webView获取网页标签值
HTML DOM使用
获取html标签值:
方法1:
方法2: 不使用loadUrl()方法,也无需添加js接口回调
两种方法的输出结果:
注意: 其中使用documentgetElementsByTagName('span')[0]innerHTML也能获取到标签的值。
但是根据class获取documentgetElementsByClassName("data2")innerHTML无法获取到标签值,Id也是一样。不过使用documentquerySelector('spandata2')方法无论是标签,class,id都能获取到。
首先建议你参考下小青年的这篇文章 页面传参终极版 ,
我们可以先在父页面中写一个监听事件
windowaddEventListener('自定义事件', function(event) {
//将 *** 作父页面元素的方法写在该监听事件中
var 参数 = eventdetail参数;
//do sth with 参数});
在子页面如果有涉及到需要 *** 作父页面元素,则可以需要 *** 作的方法里调用下面的方法,将需要传递的参数fire到main页面就可以了
function XXX(){
var main = pluswebviewcurrentWebview()parent();
mui,fire(main,"自定义事件",{
参数:值
})}
webview js之间的交互,项目中马上用到。
JS调用java代码效果图
java代码调用javasrcipt代码效果图
indexhtml代码:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 401//EN" ">
<xml version="10" encoding="utf-8"><LinearLayout xmlns:android=">
public class MainActivity extends AppCompatActivity {private WebView mWebView; @Override protected void onCreate(Bundle savedInstanceState) { superonCreate(savedInstanceState); setContentView(Rlayoutactivity_main); mWebView = (WebView) findViewById(Ridtest_webview); //设置WebView支持JavaScript mWebViewgetSettings()setJavaScriptEnabled(true); mWebViewloadUrl("file:///android_asset/indexhtml"); mWebViewaddJavascriptInterface(new JsInterface(this), "AndroidWebView"); //添加客户端支持 mWebViewsetWebChromeClient(new WebChromeClient()); findViewById(Ridtest_btn)setOnClickListener(new ViewOnClickListener() { @Override public void onClick(View v) {
sendInfoToJs(); }
}); } private class JsInterface { private Context mContext; public JsInterface(Context context) { thismContext = context; } //在js中调用windowAndroidWebViewshowInfoFromJs(name),便会触发此方法。 @JavascriptInterface public void showInfoFromJs(String share) {
ToastmakeText(mContext, share, ToastLENGTH_SHORT)show(); }
} //在java中调用js代码 public void sendInfoToJs() {
String msg = ((EditText)findViewById(Ridtest_edt))getText()toString(); //调用js中的函数:showInfoFromJava(msg) mWebViewloadUrl("javascript:showInfoFromJava('" + msg + "')"); }
总结下,java代码中要设置webview对javascript的支持,addJavascriptInterface(new JsInterface(this), "AndroidWebView");//这句代码中的第二个参数是在js访问方法的地址。
windowAndroidWebViewshowInfoFromJs(share);
JS代码:
//根据class名称获取div数组
function getClass(parent,sClass)
{
var aEle=parentgetElementsByTagName('div');
var aResult=[];
var i=0;
for(i<0;i<aElelength;i++)
{
if(aEle[i]className==sClass)
{
aResultpush(aEle[i]);
}
};
return aResult;
}
function hideOther()
{
getClass(document,'nav-sides')[0]styledisplay='none';
getClass(document,'side-bar')[0]styledisplay='none';
getClass(document,'area-main')[0]styledisplay='none';
getClass(document,'home-foot')[0]styledisplay='none';
getClass(document,'enter')[0]styledisplay='none';
getClass(document,'crumb')[0]styledisplay='none';
getClass(document,'date-tab clearfix')[0]styledisplay='none';
documentgetElementById('id_sidebar')styledisplay='none';
documentgetElementById('top_nav')styledisplay='none';
documentgetElementById('fix-personal')styledisplay='none';
documentgetElementById('waterlogo')styledisplay='none';
getClass(document,'wrap')[0]styleminWidth=0;
getClass(document,'game')[0]stylepaddingTop=0;
}
然后在WebViewClient的onPageFinished判断url,加载我们的js代码。
然后你的设置webview即可。
@Override
public void onPageFinished(WebView view, String url) {
if(url!=null && urlcontains("/p/resource/weapon/iProductID/39")){
String fun="javascript:function getClass(parent,sClass) { var aEle=parentgetElementsByTagName('div'); var aResult=[]; var i=0; for(i<0;i<aElelength;i++) { if(aEle[i]className==sClass) { aResultpush(aEle[i]); } }; return aResult; } ";
viewloadUrl(fun);
String fun2="javascript:function hideOther() {getClass(document,'nav-sides')[0]styledisplay='none'; getClass(document,'side-bar')[0]styledisplay='none'; getClass(document,'area-main')[0]styledisplay='none'; getClass(document,'home-foot')[0]styledisplay='none'; getClass(document,'enter')[0]styledisplay='none'; getClass(document,'crumb')[0]styledisplay='none';getClass(document,'date-tab clearfix')[0]styledisplay='none'; documentgetElementById('id_sidebar')styledisplay='none'; documentgetElementById('top_nav')styledisplay='none'; documentgetElementById('fix-personal')styledisplay='none'; documentgetElementById('waterlogo')styledisplay='none';getClass(document,'wrap')[0]styleminWidth=0;getClass(document,'game')[0]stylepaddingTop=0;}";
viewloadUrl(fun2);
viewloadUrl("javascript:hideOther();");
}
superonPageFinished(view, url);
}
以上就是关于如何获取WebView内容高度全部的内容,包括:如何获取WebView内容高度、如何实现 webview 获取到网页输入框中得数据、WebView使用等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)