在android1.6之前的api中有有直接的方法来对webview设置代码,但是在之后的API中去掉了。所以只能寻求别的方法来设置代码。
下面代码是用反射原理来对webview设置代理:
public static boolean setProxy(Context ctx, String host, int port) {
boolean ret = false;
try {
Log.d("WebViewProxySettings", "setProxy defaulthost="+host+"port="+port);
Object requestQueueObject = getRequestQueue(ctx);
if (requestQueueObject != null) {
//Create Proxy config object and set it into request Q
HttpHost httpHost = new HttpHost(host, port, "http");
setDeclaredField(requestQueueObject, "mProxyHost", httpHost);
ret = true;
}
} catch (Exception e) {
e.printStackTrace();
}
return ret;
}
public static String getProxyHostname(Context ctx){
String res = null;
try {
Object requestQueueObject = getRequestQueue(ctx);
if (requestQueueObject != null) {
Object fild = getDeclaredField(requestQueueObject,"mProxyHost");
if(fild!=null){
HttpHost host = (HttpHost)fild;
res = host.getHostName();
}
}
} catch (Exception e) {
e.printStackTrace();
}
return res;
}
public static void cancelProxy(Context ctx){
try {
Object requestQueueObject = getRequestQueue(ctx);
if (requestQueueObject != null) {
setDeclaredField(requestQueueObject, "mProxyHost", null);
}
} catch (Exception e) {
e.printStackTrace();
}
}
public static Object getRequestQueue(Context ctx) throws Exception {
Object ret = null;
Class networkClass = Class.forName("android.webkit.Network");
if (networkClass != null) {
Object networkObj = invokeMethod(networkClass, "getInstance", new Object[]{ctx}, Context.class);
if (networkObj != null) {
ret = getDeclaredField(networkObj, "mRequestQueue");
}
}
return ret;
}
private static Object getDeclaredField(Object obj, String name)
throws SecurityException, NoSuchFieldException,
IllegalArgumentException, IllegalAccessException {
Field f = obj.getClass().getDeclaredField(name);
f.setAccessible(true);
Object out = f.get(obj);
//System.out.println(obj.getClass().getName() + "." + name + " = "+ out);
return out;
}
private static void setDeclaredField(Object obj, String name, Object value)
throws SecurityException, NoSuchFieldException,
IllegalArgumentException, IllegalAccessException {
Field f = obj.getClass().getDeclaredField(name);
f.setAccessible(true);
f.set(obj, value);
}
private static Object invokeMethod(Object object, String methodName, Object[] params, Class... types) throws Exception {
Object out = null;
Class c = object instanceof Class ? (Class) object : object.getClass();
if (types != null) {
Method method = c.getMethod(methodName, types);
out = method.invoke(object, params);
} else {
Method method = c.getMethod(methodName);
out = method.invoke(object);
}
//System.out.println(object.getClass().getName() + "." + methodName + "() = "+ out);
return out;
}
分享到:
相关推荐
网络视图代理设置 Android WebView 代理的类
2. 在Webview的生命周期方法中控制对系统代理设置的响应。 3. 提供一个接口让用户设置系统代理,通常是通过启动系统设置页面。 以上方法适用于大多数情况,但需要注意的是,不同Android版本可能有差异,部分设备...
在Windows Forms(Winform)应用开发中,有时候我们需要在内嵌的WebBrowser控件中设置代理服务器,以便通过特定的网络通道访问网页。这个过程涉及到WebBrowser控件的使用及其代理设置,对于开发者来说,理解并正确...
Android Webview虽然提供了页面加载及资源请求的钩子,但是对于h5的ajax请求并没有提供干涉的接口,这意味着我们不能在webview中干涉javascript发起的http请求,而有时候我们确实需要能够截获ajax请求并实现一些功能...
在 Android 中,我们可以使用 WebView 的 getSettings() 方法来获取设置对象,然后使用 setUserAgentString() 方法来设置用户代理。例如: `WebView webView = (WebView) findViewById(R.id.webview);` `webView....
在某些情况下,我们可能需要在`WebView`中设置代理服务器,例如测试网络请求,或者在受限的网络环境中通过特定的代理来访问网页。在`DroidWebViewProxyDemo`中,开发者可能展示了如何配置`WebView`来使用自定义的...
在Android开发中,WebView是一个非常重要的组件,它允许我们在应用程序中内嵌网页内容,并实现Java与JavaScript之间的交互。这种交互能力使得我们可以利用Web技术来增强原生应用的功能,同时保持了良好的用户体验。...
首先,我们需要在`UIViewController`中设置`UIWebView`并实现其代理方法。代理方法`webView(_:shouldStartLoadWith:)`允许我们在网页链接被点击前进行拦截和处理。以下是创建和设置`UIWebView`的基本步骤: ```...
2. 在Activity或Fragment中初始化并设置WebView: ```java WebView webView = findViewById(R.id.webView); webView.setWebViewClient(new WebViewClient()); webView.loadUrl("https://www.example.com"); ```...
在这个案例中,我们可能会在 `onCreate()` 方法中设置Webview的相关属性。 总之,使用Webview加载单页面应用需要关注多个方面,包括基本的加载操作、交互设计、安全性以及性能优化。理解并掌握这些要点,能帮助我们...
在这个类中,你可以覆盖一些方法来定制Webview的行为,比如设置缓存策略、网络代理等。 3. **初始化TBS**:在应用程序启动时,你需要调用`X5CoreEngine.init`进行初始化,传入你的应用程序上下文和一个回调接口,...
在iOS开发中,WebView是一种非常重要的组件,它允许我们在应用程序中内嵌网页内容。这个"ios-webView加载进度和显示标题.zip"文件很显然聚焦于如何利用WebView来展示网页,并实时跟踪其加载进度以及动态更新标题。...
用C#实现web代理服务器 web服务器代理 c# web
1. 页面刚加载时:在`webViewDidFinishLoad:`代理方法中,通过执行JavaScript获取页面总高度,例如上述代码所示。 2. 页面动态更新:如果页面内容是动态加载的,例如通过Ajax,那么需要监听`UIWebView`的`...
- 在对应的Activity(如MainActivity.java)中初始化WebView,并设置其加载的URL: ```java WebView webView = findViewById(R.id.webView); webView.loadUrl("http://www.example.com"); ``` 2. **启用...
在cell的`awakeFromNib()`或`layoutSubviews()`方法中设置webView的frame,并确保它适应内容大小。 3. **UIWebView的使用**:在tableView的代理方法`tableView(_:didSelectRowAt:)`中,当用户点击某行时,获取对应...
- **布局文件**:在XML布局文件中添加WebView元素,并为其设置id。 - **Java代码**:在Activity或Fragment中找到对应的WebView实例,调用`loadUrl()`方法加载网页地址,如`webView.loadUrl(...
在IT行业中,`WebView`是一种常见且重要的组件,特别是在跨平台应用开发中。在这个场景下,我们关注的是基于Qt框架的`WebView`实现,也就是Qt浏览器。Qt是一个强大的C++库,提供了丰富的功能来构建桌面、移动甚至...
在移动应用开发中,WebView是一种常见的组件,它允许在原生应用内展示和交互HTML内容。然而,WebView在处理某些复杂网页功能时可能会遇到限制,比如`input type="file"`的文件上传功能。这个功能在许多网站上用于让...
6. **实现Webview代理方法**:你需要遵循`UIWebViewDelegate`协议,并实现相应的代理方法,以便在加载过程中获取反馈: ```swift func webView(_ webView: UIWebView, didFailLoadWithError error: Error) { // ...