All Projects → agusibrahim → Android-Web-Inspector

agusibrahim / Android-Web-Inspector

Licence: other
How to Inspecting Android WebView, Network logs, XHR logs (including url request and parameter) and Element/DOM inspecting

Programming Languages

java
68154 projects - #9 most used programming language

Projects that are alternatives of or similar to Android-Web-Inspector

X5Bridge
Three party libraries of Tencent x5webview and JS interaction
Stars: ✭ 17 (-68.52%)
Mutual labels:  webview, webviewjavascriptbridge
WebViewJavaScriptBridge
android webview javascript bridge
Stars: ✭ 24 (-55.56%)
Mutual labels:  webview, webviewjavascriptbridge
WebViewExample
work as a webview testing environment for frontend developers
Stars: ✭ 19 (-64.81%)
Mutual labels:  webview
Webview
Android WebView,Js互调
Stars: ✭ 22 (-59.26%)
Mutual labels:  webview
UIFramework
A powerful UI framework for the game Onset (https://playonset.com/)
Stars: ✭ 13 (-75.93%)
Mutual labels:  webview
electric-webview
Electric WebView is a scriptable WebView for developers.
Stars: ✭ 16 (-70.37%)
Mutual labels:  webview
MHWebViewController
An Instagram inspired Web View Controller.
Stars: ✭ 75 (+38.89%)
Mutual labels:  webview
WebViewJavascriptBridge
This is a communication between Android applications and Web Javascript to establish a bridge between the call support each other
Stars: ✭ 16 (-70.37%)
Mutual labels:  webviewjavascriptbridge
webview
Build cross platform desktop apps with Elixir and web technologies.
Stars: ✭ 18 (-66.67%)
Mutual labels:  webview
Vanadium
Privacy and security enhanced releases of Chromium for GrapheneOS. Vanadium provides the WebView and standard user-facing browser on GrapheneOS. It depends on hardening in other GrapheneOS repositories and doesn't include patches not relevant to the build targets used on GrapheneOS.
Stars: ✭ 365 (+575.93%)
Mutual labels:  webview
TeadsSDK-iOS
Teads SDK iOS Sample App - Check out an open-source sample of the Teads iOS SDK implementation
Stars: ✭ 22 (-59.26%)
Mutual labels:  webview
HybridCache
a library which can intercept the loading process of webpage resource and cache all the resource files we are interested, just like css files,js files, images files ,html files and so on.So we can share the cache between the web view and our native logic.(这个库可以帮组我们拦截webview加载网页的时候所有的资源请求,并且根据实际的需求策略进行缓存管理。基于此,可以帮助我们实现webview与natvie的逻辑的缓存共存,比如web…
Stars: ✭ 64 (+18.52%)
Mutual labels:  webview
pdfjs
A sample for showing PDF files in a Xamarin.Forms application with pdf.js
Stars: ✭ 32 (-40.74%)
Mutual labels:  webview
vscode-http-client
Simple way to do HTTP requests in Visual Studio Code.
Stars: ✭ 26 (-51.85%)
Mutual labels:  webview
MediumUnlimited
Android App written with Flutter/Dart to navigate medium.com without limitations.
Stars: ✭ 28 (-48.15%)
Mutual labels:  webview
coc-webview
Using an external browser to support the webview in coc.nvim.
Stars: ✭ 21 (-61.11%)
Mutual labels:  webview
upload-file-to-backblaze-b2-from-browser-example
Demonstrates calling the b2_upload_file Backblaze B2 Cloud Storage API from a web browser using AJAX.
Stars: ✭ 28 (-48.15%)
Mutual labels:  xhr
RichEditorView
Android 基于WebView的富文本编辑器 - 仿简书编辑器
Stars: ✭ 77 (+42.59%)
Mutual labels:  webview
webview
Cross-platform header-only webview library for C++
Stars: ✭ 59 (+9.26%)
Mutual labels:  webview
Bloop
A light weight scratch pad inspired and derived from https://github.com/IvanMathy/Boop.
Stars: ✭ 54 (+0%)
Mutual labels:  webview

Android Web Inspector

image

DOWNLOAD APK

Get it on Google Play

Terinspirasi dari Google Chrome DevTool, banyak faselitas Uji untuk pengembang yang disediakan. Di Android sendiri bisa kita lakukan inspeksi halaman dengan cara Remote melalui Wi-Fi atau melalui USB dengan ADB Protokol. Namun inspeksi melalui remote tersebut tentu saja dilakukan di PC/Laptop, tidak bisa standalone. Disini dijelaskan bagiaimana cara inspeksi halaman seperti Inspecting Element/DOM, XHR logger dan Network logger di WebView Android.

Android menyediakan fungsi Javascript Interface yang memungkinkan kita untuk membuat fungsi javascript melalui java, atau memanggil fungsi java dari javascript dan memanggil fungsi javascript melalui java. ah ribet penjelasannya 😂

Baiklah, berikut langkah-langkahnya:

Membuat Callback

Pertama kita membuat Javascript Interface menggunakan Java, dimana saat fungsi JS itu dipanggil, maka akan mentrigger fungsi di Java, ini berguna untuk mewadahi data yang sudah didapat dari hasil intercept.

class MyJavaScriptInterface{
		@JavascriptInterface
		@SuppressWarnings("unused")
		public void now(String content){
			android.util.Log.d("xhr", content);
		}
}

Tambahkan MyJavaScriptInterface ke WebView

webView.addJavascriptInterface(new MyJavaScriptInterface(), "callme");

Panggil dengan javascript

callme.now("Hello Bro");

Atau membuat fungsi JS seperti jQuery yaitu simbol dolar, tapi kita memakai double dolar

webView.addJavascriptInterface(new MyJavaScriptInterface(), "$$");

Panggil dengan javascript

$$.now("Hello Bro");

Overriding XMLHttpRequest

Yap, dengan melakukan override pada fungsi XHR ini kita dapat melempar data yang kita inginkan ke JS Interface yang sudah kita buat. Bagaimana cara override request dan response dari XHR? Saya mendapatkan caranya disini

Inject JS untuk Override XHR setiap halaman selesai dimuat, seperti ini

@Override
public void onPageFinished(WebView view, String url) {
    // xhr override
    view.loadUrl("javascript:function injek(){window.hasovrde=1;var e=XMLHttpRequest.prototype.open;XMLHttpRequest.prototype.open=function(ee,nn,aa){this.addEventListener('load',function(){$$.log(this.responseText, nn, JSON.stringify(arguments))}),e.apply(this,arguments)}};if(window.hasovrde!=1){injek();}");
    super.onPageFinished(view, url);
}

Diatas saya membuat fungsi injek, intinya agar script di inject sekali saja jika memang belum pernah melakukan inject JS diatas. Oya, script sengaja di Minify menggunakan layanan online http://refresh-sf.com/, atau kamu bisa meng-unminify disini http://unminify.com/

Inspect Element

image

Google Chrome DevTools

Selanjutnya adalah Inspect Element atau DOM, dalam Google Chrome DevTools faselitas ini ada di panel pertama. Disini kita bisa melihat source code dari setiap element, misalnya dengan cara klik Kanan di Chrome pada element yang dikehendaki, trus pilih Inspect.

Di Android kita juga akan melakukannya, yaitu dengan cara men-Tap element yang dikehendaki (misal sebuah form), maka source code dari element tersebut akan muncul, dan kita juga bisa mengeditnya.

document.addEventListener('click', function(e) {
    e.preventDefault();
    e.stopPropagation();
    var elem = document.elementFromPoint(e.clientX, e.clientY);
    alert(elem.parentElement.outerHTML)
}, true);

Fungsi JS diatas yaitu untuk mendapatkan Element dari setiap yang kita Klik/Tap dalam halaman web. Dengan preventDefault serta stopPropagation membuat fungsi default klik di nonaktifkan, misalnya klik di sebuah link maka kita tidak diarahkan ke link tersebut. Seperti biasa, inject JS diatas saat laman selesai dimuat. Seperti ini:

@Override
public void onPageFinished(WebView view, String url) {
    // click to Element
    view.loadUrl("javascript:function injek2(){window.touchblock=0,window.dummy1=1,document.addEventListener('click',function(n){if(1==window.touchblock){n.preventDefault();n.stopPropagation();var t=document.elementFromPoint(n.clientX,n.clientY);window.ganti=function(n){t.outerHTML=n},window.gantiparent=function(n){t.parentElement.outerHTML=n},$$.print(t.parentElement.outerHTML, t.outerHTML)}},!0)}1!=window.dummy1&&injek2();");
    // xhr override
    view.loadUrl("javascript:function injek(){window.hasovrde=1;var e=XMLHttpRequest.prototype.open;XMLHttpRequest.prototype.open=function(ee,nn,aa){this.addEventListener('load',function(){$$.log(this.responseText, nn, JSON.stringify(arguments))}),e.apply(this,arguments)}};if(window.hasovrde!=1){injek();}");
    super.onPageFinished(view, url);
}

Bahaimana mengedit Element dari hasil klik?

Jika JS diatas di Minify, terlihat ada fungsi global ganti dan gantiparent, jadi setiap Element dari hasil click bisa kita edit menggunakan kedua fungsi tersebut.

DOWNLOAD

https://play.google.com/store/apps/details?id=ai.agusibrahim.xhrlog

Note that the project description data, including the texts, logos, images, and/or trademarks, for each open source project belongs to its rightful owner. If you wish to add or remove any projects, please contact us at [email protected].