某公司開發的會員認證機制是提供我們一個網頁…
用戶自行輸入帳號密碼按了確定後…網頁再經過一連串的 Redirect
最後將資訊直接印在網頁的 body 裡面並做 hidden 處理…
也就是說 App 在介接時必須觀察該 WebView Redirect 的過程…
並在某個 URL 或網頁 body 內出現了某個 id 的 div 時將內容拿出來做處理…
而 Android 的 WebView 有提供 loadData 但卻沒提供 readData 這種 Method
想要把網頁中的原始碼讀出來必需很繞路的配合 External Object 才能實現…
以下是一個小範例…當 WebView Redirect 到某個 URL 時將網頁原始碼讀出來…
並將讀出來的字串設值給類別的字串成員做後續處理…
public class LoginActivity extends Activity
{
private WebView wv;
public String htmlSourceCode = "";
public void LoginActivity()
{
}
@Override
public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
wv = (WebView) findViewById(R.id.wv);
WebSettings webSettings = wv.getSettings();
webSettings.setJavaScriptEnabled(true);
wv.addJavascriptInterface(new
AppExt(), "ExtObj"); // 新增 JavaScript 方法
}
@Override
public void onStart()
{
super.onStart();
wv.setWebViewClient(new LoginWebViewClientImpl());
wv.loadUrl("會員認證的網址");
}
private class AppExt
{
public void readHTML(String html)
{
htmlSourceCode = html; // 拿到網頁原始碼嘍
// ParseWebCode(); // 拿原始碼做處理看看認證結果
}
}
private final class LoginWebViewClientImpl extends WebViewClient
{
public void LoginWebViewClientImpl()
{
}
@Override
public void onPageFinished(WebView view, String url)
{
if (url.contains("某個代表認證完成的 URL"))
{
view.loadUrl("javascript:window.ExtObj.readHTML(document.getElementsByTagName('html')[0].innerHTML);");
}
}
}
}
沒有留言:
張貼留言