标签: android-webview

如何处理"无限"网页?

很久以前,生活很简单:所有网页的长度都是有限的,如果它们不适合当前的窗口/视图大小,你只需向下滚动直到到达页面底部.

但我最近注意到网页设计界有一个新趋势:无底网页.

可能最熟悉的利用这些页面的网站的例子是Facebook和Twitter:你滚动到"底部",只是为了触发一些刷新,为页面添加内容,所以"旧底部"不再是底部,而是有一个新的"底部".

在Android WebView中,我需要能够捕获该"页面"上当前可用的所有内容,但我不确定如何处理此问题:

模拟用户向下滚动通过View.scrollBy(INT X,int y)对,PageDown键()window.scrollTo()

或者是否有一种API方法可以自动执行此操作?

或者我接近这个完全错误,我不应该试图在一次捕获中找到"真正的底部"(如果可能的话)?

编辑:似乎标记这个问题javascript传达了相反的信息.我有兴趣使用Java在Android的WebView上捕获(然后处理)这样的无底页面.

java android webview android-webview

15
推荐指数
1
解决办法
1577
查看次数

在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)

android android-webview

15
推荐指数
1
解决办法
2万
查看次数

即使父活动暂停,admob AdView使用的WebViewCoreThread也使用高CPU

我正在使用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)

android admob android-webview adview

15
推荐指数
2
解决办法
3598
查看次数

Web视图如何加载Html内容?

我通过变量在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)

android android-webview

15
推荐指数
2
解决办法
4万
查看次数

Android Webview shouldOverrideUrlLoading方法

什么时候叫shouldOverrideUrlLoading方法?

webView.setWebViewClient(new WebViewClient(){
    @Override
    public boolean shouldOverrideUrlLoading(WebView view, String url) {


    }
});
Run Code Online (Sandbox Code Playgroud)
  1. 在初始加载url时调用它吗?例如webView.loadUrl( "file:///android_asset/html/index.html");
  2. 是否每次调用webview的URL都会更改?

任何参考?我找不到一个.谢谢

android uri android-assets android-webview

15
推荐指数
1
解决办法
3万
查看次数

无法在Android Web View中查看视频

我的网页使用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 android-webview android-mediaplayer

15
推荐指数
1
解决办法
1068
查看次数

我们如何处理HTTP错误,例如:android.webview中的401,403,404,500?

Android.webview.WebViewClientclass允许活动WebViewClient.onReceivedErrorWebView无法加载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)

android android-webview

15
推荐指数
1
解决办法
4746
查看次数

Android WebView:删除google drive/doc viewer中的弹出选项

我通过将pdf url附加到google doc api来加载WebView中的pdf文档

http://docs.google.com/gview?embedded=true&url=myurl

Pdf加载得很好,但网页显示两个选项 - Zoom-inPop-Out.有没有办法通过发送一些参数来禁用/隐藏弹出选项?任何帮助将不胜感激.谢谢!

在此输入图像描述

pdf android google-docs android-webview google-drive-api

15
推荐指数
2
解决办法
5729
查看次数

Android浏览器会从完整限定符中删除https://方案

在我的应用程序中,我在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

15
推荐指数
1
解决办法
346
查看次数

Android:设备屏幕没有与最新的Android系统WEBVIEW超时

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日)

https://www.apkmirror.com/apk/google-inc/android-system-webview/android-system-webview-59-0-3071-25-release/android-system-webview-59-0-3071- 25-Android的APK下载/

看到屏幕超时问题.

7)问题没有看到android 7.0使用chrome v59作为webview.

使用的设备:注4(5.0.1)

Webview版本:59.0.3071.125

android google-chrome android-webview

15
推荐指数
1
解决办法
449
查看次数