如何获取WebView内容高度

如何获取WebView内容高度,第1张

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使用等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/web/9342968.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-04-27
下一篇2023-04-27

发表评论

登录后才能评论

评论列表(0条)

    保存