很久以前,生活很简单:所有网页的长度都是有限的,如果它们不适合当前的窗口/视图大小,你只需向下滚动直到到达页面底部.
但我最近注意到网页设计界有一个新趋势:无底网页.
可能最熟悉的利用这些页面的网站的例子是Facebook和Twitter:你滚动到"底部",只是为了触发一些刷新,为页面添加内容,所以"旧底部"不再是底部,而是有一个新的"底部".
在Android WebView中,我需要能够捕获该"页面"上当前可用的所有内容,但我不确定如何处理此问题:
模拟用户向下滚动通过View.scrollBy(INT X,int y)对,PageDown键()或 window.scrollTo() ?
或者是否有一种API方法可以自动执行此操作?
或者我接近这个完全错误,我不应该试图在一次捕获中找到"真正的底部"(如果可能的话)?
编辑:似乎标记这个问题javascript传达了相反的信息.我有兴趣使用Java在Android的WebView上捕获(然后处理)这样的无底页面.
在我的webview活动中,我可以垂直(向上和向下)滚动网页,但我不能水平滚动(从右到左或从左到右),当我也缩放网页时,仍然没有水平滚动.
有没有可能在webview中添加这个?非常感谢你.
getWindow().setFeatureInt( Window.FEATURE_PROGRESS, Window.PROGRESS_VISIBILITY_ON);
mWebView = (WebView) findViewById(R.id.webview);
mWebView.getSettings().setBuiltInZoomControls(true);
mWebView.getSettings().setSupportZoom(true);
mWebView.setVerticalScrollBarEnabled(true);
mWebView.setWebChromeClient(new WebChromeClient() {
public void onProgressChanged(WebView view, int progress)
{
//Make the bar disappear after URL is loaded, and changes string to Loading...
MyActivity.setTitle("Loading...");
MyActivity.setProgress(progress * 100); //Make the bar disappear after URL is loaded
// Return the app name after finish loading
if(progress == 100)
MyActivity.setTitle(R.string.app_name);
}
});
mWebView.setWebViewClient(new Manipulation());
mWebView.getSettings().setJavaScriptEnabled(true);
mWebView.loadUrl(myURL);
Run Code Online (Sandbox Code Playgroud)
XML:
<?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:id="@+id/webview"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
/> …Run Code Online (Sandbox Code Playgroud) 我正在使用Google Admob SDK v6.1.0(https://developers.google.com/mobile-ads-sdk/download),并以编程方式(不是以XML格式)实例化com.google.ads.AdView,并添加它在我的Activity中动态地变成LinearLayout.
我的一位用户报告说,当他们在我的Activity中点击Home按钮时(为了让它背景),他们开始看到来自我的应用程序的高CPU使用率.我能够在Jellybean平台上重现这一点,并注意到高CPU使用率的来源是WebViewCoreThread.
我的Activity根本不使用任何WebView,但我能够逐步完成Activity的初始化,并注意到当我实例化AdMob AdView对象时,此WebViewCoreThread会启动.作为AdMob引用中的状态,我在Activity的onDestroy()方法中调用此AdView上的destroy().我改变了我的代码,在我的onPause()方法中调用了AdView.onDestroy().但似乎没有任何因素导致WebViewCoreThread停止.我猜,如果那个线程坚持下去,我没关系.但是,如果我反复多次启动我的Activity,这个线程开始使用我的CPU的8%到25%之间的任何地方,即使我的活动不在前台.
我注意到其他一些用户说你必须调用WebView.onPause()作为纠正措施.(http://stackoverflow.com/questions/2040963/webview-threads-never-stop-webviewcorethread-cookiesyncmanager-http0-3)但这对我来说不是直接可行的,因为我的网页视图是由AdMob的AdView创建的.我还改变了我的代码,调用.removeAllViews()为mt Admob AdView的容器LinearLayout对象,然后调用System.gc()强制垃圾收集,但似乎什么都没有杀死我的WebViewCoreThread并最终开始吃掉CPU直到我强行 - 杀了我的应用程序.
AdMob为什么这样做的任何线索,以及我如何强制杀死这个线程?
我附加了一个我创建的类来封装AdView的创建和销毁.我在我的活动的初始化中调用了这个类的getNewAd()方法.我在Activity的onPause()和onDestroy()方法中调用了这个类的removeAd():
package com.shiprack.client;
import com.google.ads.AdRequest;
import com.google.ads.AdSize;
import com.google.ads.AdView;
import com.mobclix.android.sdk.Mobclix;
import com.mobclix.android.sdk.MobclixMMABannerXLAdView;
import android.app.Activity;
import android.view.Gravity;
import android.view.ViewGroup.LayoutParams;
import android.widget.LinearLayout;
public class AdManager {
public AdManager(EventLog logger, LinearLayout container, Activity activity) {
_container = container;
_activity = activity;
_eventLogger = logger;
}
public void setNetwork(int network) {
_network = network;
}
public void getNewAd() {
LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(LayoutParams.FILL_PARENT,LayoutParams.FILL_PARENT);
params.gravity = Gravity.CENTER;
switch (_network) { …Run Code Online (Sandbox Code Playgroud) 我通过变量在Response中获取此html内容: String mresult=
<html xmlns="http://www.w3.org/1999/xhtml"><head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
<title>Lorem Ipsum</title>
</head>
<body style="width:300px; color: #00000; ">
<p><strong> About us</strong> </p>
<p><strong> Lorem Ipsum</strong> is simply dummy text .</p>
<p><strong> Lorem Ipsum</strong> is simply dummy text </p>
<p><strong> Lorem Ipsum</strong> is simply dummy text </p>
</body></html>
Run Code Online (Sandbox Code Playgroud)
它无法加载webview,我必须尝试加载它像这样:
web.loadDataWithBaseURL(null, mresult, "text/html", "UTF-8", null);
Run Code Online (Sandbox Code Playgroud)
仍webview显示空白页面.
在xml文件中:
<WebView
android:id="@+id/wV"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:layout_margin="10dp"
android:background="@android:color/transparent"
android:cacheColorHint="#00000000" />
Run Code Online (Sandbox Code Playgroud)
在活动中:
String mresult="Here my given data";
WebView web = (WebView)findViewById(R.id.wV);
web.setWebViewClient(new WebViewClient() …Run Code Online (Sandbox Code Playgroud) 什么时候叫shouldOverrideUrlLoading方法?
webView.setWebViewClient(new WebViewClient(){
@Override
public boolean shouldOverrideUrlLoading(WebView view, String url) {
}
});
Run Code Online (Sandbox Code Playgroud)
webView.loadUrl( "file:///android_asset/html/index.html");任何参考?我找不到一个.谢谢
我的网页使用html5视频标签记录了视频文件.
我有一个嵌入式Web服务器(NanoHTTPD)运行,它从文件系统提供我的文件.其他一切都有效,但是当我点击播放HTML5视频时.它会出现以下错误,并且不播放视频
09-29 20:38:36.620: D/HTML5VideoInline(11532): HTML5VideoInline created
09-29 20:38:36.625: V/MediaPlayer(11532): setVideoSurfaceTexture
09-29 20:38:36.625: V/MediaPlayer-JNI(11532): reset
09-29 20:38:36.625: V/MediaPlayer(11532): reset
09-29 20:38:36.625: I/MediaPlayer(11532): path is null
09-29 20:38:36.640: D/MediaPlayer(11532): setDataSource IOException happend :
09-29 20:38:36.640: D/MediaPlayer(11532): java.io.FileNotFoundException: No content provider: http://10.207.114.115:8765/SLC/Book3_html/Book3/book/BO/demo.mp4
09-29 20:38:36.640: D/MediaPlayer(11532): at android.content.ContentResolver.openTypedAssetFileDescriptor(ContentResolver.java:713)
09-29 20:38:36.640: D/MediaPlayer(11532): at android.content.ContentResolver.openAssetFileDescriptor(ContentResolver.java:617)
09-29 20:38:36.640: D/MediaPlayer(11532): at android.media.MediaPlayer.setDataSource(MediaPlayer.java:954)
09-29 20:38:36.640: D/MediaPlayer(11532): at android.webkit.HTML5VideoView.prepareDataCommon(HTML5VideoView.java:326)
09-29 20:38:36.640: D/MediaPlayer(11532): at android.webkit.HTML5VideoView.prepareDataAndDisplayMode(HTML5VideoView.java:363)
09-29 20:38:36.640: D/MediaPlayer(11532): at android.webkit.HTML5VideoInline.prepareDataAndDisplayMode(HTML5VideoInline.java:72)
09-29 20:38:36.640: D/MediaPlayer(11532): at android.webkit.HTML5VideoViewProxy$VideoPlayer.play(HTML5VideoViewProxy.java:289)
09-29 20:38:36.640: D/MediaPlayer(11532): at android.webkit.HTML5VideoViewProxy.handleMessage(HTML5VideoViewProxy.java:465) …Run Code Online (Sandbox Code Playgroud) Android.webview.WebViewClientclass允许活动WebViewClient.onReceivedError在WebView无法加载URL 时收到回调,但没有HTTP错误的回调,例如:401,403,404,500.我们如何处理此错误WebView?
这是一些代码:
public class WebViewActivity extends Activity {
WebView webView;
public String TAG="log";
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.webview);
webView = (WebView) findViewById(R.id.webview1);
webView.getSettings().setJavaScriptEnabled(true);
webView.loadUrl("http://192.168.0.6:8081/karbonn/add/apk//3_1/");
// webView.setWebChromeClient(new WebChromeClient());
webView.setWebViewClient(new WebViewClient(){
@Override
public void onPageFinished(WebView view, String url) {
// TODO Auto-generated method stub
super.onPageFinished(view, url);
String pageTitle = view.getTitle();
Toast.makeText(getBaseContext(), pageTitle, Toast.LENGTH_SHORT).show();
// view.get
/* if (pageTitle.contains("Apache Tomcat/7.0.40 - Error report")) {
// view.goBack();
WebViewActivity.this.finish();
//view.loadUrl("https://www.google.co.in/");
}*/
}
@Override …Run Code Online (Sandbox Code Playgroud) 我通过将pdf url附加到google doc api来加载WebView中的pdf文档
http://docs.google.com/gview?embedded=true&url=myurl
Pdf加载得很好,但网页显示两个选项 - Zoom-in和Pop-Out.有没有办法通过发送一些参数来禁用/隐藏弹出选项?任何帮助将不胜感激.谢谢!

在我的应用程序中,我在CustomTabsIntent或WebView中显示外部HTML站点:
if (customTabsIntent != null) customTabsIntent.launchUrl(this, Uri.parse("http://some.where.com/site.html"));
else startActivity(new Intent(Intent.ACTION_VIEW, Uri.parse("http://some.where.com/site.html")));
Run Code Online (Sandbox Code Playgroud)
但该HTML的风格已经更新,但我的智能手机显示旧样式(旧字体等).
在*.html文件中有一个*.css引用:
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<link href='https://my.site.com/assets/css/style.css' rel='stylesheet' type='text/css'>
</head>
Run Code Online (Sandbox Code Playgroud)
在那个*.css文件中,引用了一个单独的字体; 例如:
@font-face {
font-family: 'MyFontRegular';
src: url('https://www.openfont.org/assets/mail/fonts/MyFontWeb-Regular.woff') format('woff'),
url('https://www.openfont.org/assets/mail/fonts/MyFontWeb-Regular.eot') format('embedded-opentype');
}
Run Code Online (Sandbox Code Playgroud)
正如我所说,智能手机中的Chrome浏览器不显示引用的字体,因为它会关闭http://或https://.当我手动将该方案添加到地址栏中时,将显示正确的样式.
当我的Android应用程序调用它时,如何在我的android浏览器的地址字段中强制https://方案?
android webview android-webview chrome-custom-tabs android-customtabs
1)基于Cordova(Webview)的Android应用程序.
2)根据设备设置启动应用程序和屏幕超时.
3)从应用程序端,我们没有获取任何SCREEN_BRIGHT_WAKE_LOCK或ON_AFTER_RELEASE.
4)当应用程序放到后台并带到前台时,设备屏幕灯不会超时.
4)从应用程序端,我们没有获取任何SCREEN_BRIGHT_WAKE_LOCK或ON_AFTER_RELEASE.
5)基本上来到前台时,PowerManager获取ON_AFTER_RELEASE | SCREEN_BRIGHT_WAKE_LOCK(0x2000000a)代表我们的应用程序10311唤醒锁定并且屏幕保持打开状态.
Line 58354: 08-14 22:49:22.280 D/PowerManagerService( 1088): [api] acquire WakeLock flags=0x2000000a tag=WindowManager uid=1000 pid=1088
08-14 22:50:22.000 I/PowerManagerService( 1088): [PWL] SCREEN_BRIGHT_WAKE_LOCK 'WindowManager' ON_AFTER_RELEASE (uid=1000, pid=1088, ws=WorkSource{10311}) (elapsedTime=59719)
Run Code Online (Sandbox Code Playgroud)
6)启动Android系统WebView 59.0.3071.25 beta(无法正常工作)(2017年5月4日)
看到屏幕超时问题.
7)问题没有看到android 7.0使用chrome v59作为webview.
使用的设备:注4(5.0.1)
Webview版本:59.0.3071.125
android ×10
android-webview ×10
webview ×2
admob ×1
adview ×1
google-docs ×1
java ×1
pdf ×1
uri ×1