很久以前,生活很简单:所有网页的长度都是有限的,如果它们不适合当前的窗口/视图大小,你只需向下滚动直到到达页面底部.
但我最近注意到网页设计界有一个新趋势:无底网页.
可能最熟悉的利用这些页面的网站的例子是Facebook和Twitter:你滚动到"底部",只是为了触发一些刷新,为页面添加内容,所以"旧底部"不再是底部,而是有一个新的"底部".
在Android WebView中,我需要能够捕获该"页面"上当前可用的所有内容,但我不确定如何处理此问题:
模拟用户向下滚动通过View.scrollBy(INT X,int y)对,PageDown键()或 window.scrollTo() ?
或者是否有一种API方法可以自动执行此操作?
或者我接近这个完全错误,我不应该试图在一次捕获中找到"真正的底部"(如果可能的话)?
编辑:似乎标记这个问题javascript传达了相反的信息.我有兴趣使用Java在Android的WebView上捕获(然后处理)这样的无底页面.
我正在尝试从服务器加载一个html页面,该页面包含一个链接到android sdcard .js文件的脚本.
Java的:
String url ="http://192.168.84.86:8080/test/maw/js_load_test.html";
this.loadUrl(url);
Run Code Online (Sandbox Code Playgroud)
js_load_test.html:
<script src="file:///sdcard/test.js"></script>
Run Code Online (Sandbox Code Playgroud)
我也尝试过:
<script src="file:///android_asset/www/js/test.js"></script>
Run Code Online (Sandbox Code Playgroud)
test.js文件存在且js文件路径正确.但是在logcat:file:///sdcard/test.js:
03-18 13:01:12.467:E/Web控制台(26189):不允许加载本地资源:file:///sdcard/test.js at:0
文件:///android_asset/www/js/test.js:
03-18 13:01:53.467:E/Web Console(26189):不允许加载本地资源:file:///android_asset/www/js/test.js at:0
我正在使用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) 什么时候叫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");任何参考?我找不到一个.谢谢
我在android中实现webview应用程序.当我尝试加载https url一到两次时,它完成了活动.Agian试图加载https网址,显示网页不可用.请在下面找到我得到的图片.

当我再次点击该网址时,它会显示网站.
我使用下面的代码加载网址.
webView = (WebView) findViewById(R.id.webView);
webView.getSettings().setJavaScriptEnabled(true);
webView.loadUrl("https://www.facebook.com");
webView.clearView();
webView.measure(100, 100);
webView.getSettings().setUseWideViewPort(true);
webView.getSettings().setLoadWithOverviewMode(true);
webView.setWebViewClient(new WebViewClient() {
@Override
public boolean shouldOverrideUrlLoading(WebView view, String url) {
view.loadUrl(url);
return true;
}
@SuppressLint("NewApi")
@Override
public void onReceivedSslError(WebView view, SslErrorHandler handler, SslError error) {
super.onReceivedSslError(view, handler, error);
// this will ignore the Ssl error and will go forward to your site
handler.proceed();
error.getCertificate();
}
});
Run Code Online (Sandbox Code Playgroud)
请任何帮助人.......
提前致谢
我的网页使用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
cordova ×1
google-docs ×1
java ×1
pdf ×1
uri ×1