标签: webview

Android WebView - 拦截点击次数

我用WebView编写了一个简单的helloworld应用程序,它在我的资产文件夹的simple.html页面上有一个指向CNN的链接.

<a href="http://cnn.com">cnn.com</a>
Run Code Online (Sandbox Code Playgroud)

如何捕获我的Activity上的单击,停止WebView导航,然后通知Activity 点击了" http://CNN.com "?

android webview

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

如何确定何时Android WebView完全加载?

我想知道如何确定何时完成 WebView 加载.

让我完全定义.

  • 所有重定向都已发生
  • 页面明显显示,尚未加载任何内容

这个问题的答案很糟糕:

WebViewClient.onPageFinished() - 如果有重定向加载页面,则会多次触发.它也会在页面显示之前触发.

PictureListener.onNewPicture() - 每次屏幕更改时都会触发,每次重定向都会触发AFAICT.我怎么知道哪个射击是最后一个?

WebChromeClient.onProgressChanged() - 与onPageFinished相同的问题.(在David建议以下解决方案后添加)

Thread.sleep(5000) - 应该很明显,为什么这是不可接受的.

当然,上述工作的巧妙组合将是完美的.

为什么我想知道你问这个?因为我想注入一些JavaScript 一次一次Webview是完全完成加载.

javascript android webview

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

在Android WebView中播放Youtube HTML5嵌入式视频

我有运行的一个问题嵌入HTML5的Youtube网页视图.我想在我的应用程序上播放Youtube视频.我决定使用WebView而不是VideoView,因为我想让我的系统更灵活地从网上播放视频.

虽然有很多方法可以在Android上玩youtube,但我会使用youtube嵌入式版本." http://www.youtube.com/embed/___________________ ".因为这是我在你的android不支持flash时发现的解决方案之一.

问题:

WebView正常加载,包括嵌入的Youtube.但是我开始在youtube上看到黑屏.

当我点击它.它仅加载第一个图像,但之后它不播放.我尝试在Android浏览器上播放,它运行顺畅但不在webView中.

知道为什么吗?

以下只是我的代码片段:

WebView wv = new WebView(getApplicationContext());
wv.getSettings().setPluginState(PluginState.ON);
wv.getSettings().setJavaScriptEnabled(true);
wv.loadUrl("http://apiblog.youtube.com/2010/07/new-way-to-embed-youtube-videos.html");
setContentView(wv);
Run Code Online (Sandbox Code Playgroud)

以下是我发现非常有用的一些资源:

提前感谢您的支持和帮助:)


更新(2011年6月13日):

我成功加载了WebView中的http://m.youtube.com,但无法播放任何视频.但是当我尝试在我的Android浏览器上加载URL时,它可以播放.

从这里开始,我注意到我的WebView上的youtube站点没有登录.那么我们如何允许WebView使用与我手机中的Youtube帐户相同的凭据?它真的有效吗?

youtube video html5 android webview

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

如何以编程方式截取webview的屏幕截图,捕获整页?

我认为标题几乎涵盖了它,但我的活动中有一个webview.我已经在网页视图中加载了一个网址,我想要整个页面的截图(视口中的内容以及"下方"的内容).

我有代码可以对视口进行快照,我知道这可以通过在快照之前放大webview来在iOS中完成.我试过在这里使用相同的技术:

    WebView browserView = (WebView) findViewById(R.id.browserView);

    //Resize the webview to the height of the webpage
    int pageHeight = browserView.getContentHeight();
    LayoutParams browserParams = browserView.getLayoutParams();
    browserView.setLayoutParams(new LinearLayout.LayoutParams(LayoutParams.FILL_PARENT, pageHeight));

    //Capture the webview as a bitmap
    browserView.setDrawingCacheEnabled(true);
    Bitmap bitmap = Bitmap.createBitmap(browserView.getDrawingCache());
    browserView.setDrawingCacheEnabled(false);

    //Create the filename to use
    String randomFilenamepart = String.valueOf(new SecureRandom().nextInt(1000000));
    String filename = Environment.getExternalStorageDirectory().toString() + "/Screenshot_" + randomFilenamepart + ".jpg";
    File imageFile = new File(filename);
    //Stream the file out to external storage as a JPEG
    OutputStream fout = null;
    try { …
Run Code Online (Sandbox Code Playgroud)

android screenshot webview

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

信号11 SIGSEGV在Galaxy S3 Android WebView中崩溃

我在Android WebView中有一个复杂的,交互式的HTML5 - 它基本上可以在除Galaxy S3之外的所有平台上正常工作.在Galaxy S3(Android 4.0.4)上,每5次左右,在加载完成后,/ system/lib/libwebcore.so尝试在[各地址]访问无效内存和致命信号11(SIGSEGV) ](code = 1)被抛出.

HTML5是一场微小的战斗,敌人出现,用户斜线进行.在战斗之间是正常的html页面:正常页面 - > HTML5战斗 - >正常页面 - > HTML5战斗 - >正常页面 - > HTML5战斗.HTML5没有做任何特别开箱即用的事情 - 有很多-webkit-animation调用......

.enemy {
    position:absolute;
    opacity:0;
    -webkit-animation:enemyAnim 0.6s linear 0.2s;
}
Run Code Online (Sandbox Code Playgroud)

...引用了很多-webkit-keyframes ......

@-webkit-keyframes enemyAnim {
from {
 -webkit-transform: matrix(1, 0, 0, 1, 144.25, 150.25) scale(1, 1);
 opacity:1;
}
8.33% {
 -webkit-transform: matrix(1, 0, 0, 1, 189.406, 102.206) scale(1.3066, 1.3066);
 opacity:1;
}
16.66% {
 -webkit-transform: matrix(1, 0, 0, 1, 200.424, 82.649) scale(1.414, 1.414);
 opacity:1;
} …
Run Code Online (Sandbox Code Playgroud)

html5 android segmentation-fault webview galaxy

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

Android 4.4 WebView文件选择器无法打开?

我们正在创建一个使用webview的应用程序,并将访问用户需要上传文件的页面.我们遇到Android 4.4问题,文件选择器无法打开,单击上传按钮不会发生任何事情.此功能适用于使用openFileChooser方法的早期版本,如下所示:

 webview.setWebChromeClient(new WebChromeClient() {
        //The undocumented magic method override
        //Eclipse will swear at you if you try to put @Override here
        // For Android 3.0+
        public void openFileChooser(ValueCallback<Uri> uploadMsg) {
            mUploadMessage = uploadMsg;
            Intent i = new Intent(Intent.ACTION_GET_CONTENT);
            i.addCategory(Intent.CATEGORY_OPENABLE);
            i.setType("image/*");
            MainActivity.this.startActivityForResult(Intent.createChooser(i, "File Chooser"), FILECHOOSER_RESULTCODE);
        }

        // For Android 3.0+
        public void openFileChooser(ValueCallback uploadMsg, String acceptType) {
            mUploadMessage = uploadMsg;
            Intent i = new Intent(Intent.ACTION_GET_CONTENT);
            i.addCategory(Intent.CATEGORY_OPENABLE);
            i.setType("*/*");
            MainActivity.this.startActivityForResult(
                    Intent.createChooser(i, "File Browser"),
                    FILECHOOSER_RESULTCODE);
        }

        //For Android 4.1
        public void openFileChooser(ValueCallback<Uri> uploadMsg, …
Run Code Online (Sandbox Code Playgroud)

java android webview android-4.4-kitkat

26
推荐指数
2
解决办法
3万
查看次数

Make Espresso等待WebView完成加载

有没有可靠的方法让Espresso等待WebViews完成加载?

我尝试过这里概述的方法,但发现它不可靠.它还有其他缺点:

  • 它依赖于替换WebView的WebChromeClient.由于WebViewrt由于某种原因没有getWebChromeClient()方法,因此无法包装任何现有的WebChromeClient.
  • 它需要一个特定的WebView实例,因此每次我使用WebView启动一个Activity时,我必须获取WebView实例并为其注册一个新的WebviewIdlingResource.

我希望有人有一个没有任何这些缺点的解决方案.我曾希望espresso-web软件包可以提供解决方案,但它似乎没有提供与加载有关的任何内容.

testing android webview android-espresso

26
推荐指数
1
解决办法
4349
查看次数

取消在Android上的WebView中加载

如何在方法WebView启动时取消加载操作loadData()

android webview

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

Android WebView Javascript getSelection

我在使用Android中的WebView进行选择时遇到了一些麻烦.

我可以让WebView进入选择模式.我甚至可以将它复制到ClipBoard.但我真正想做的是永久地突出选择.

因此,想法是将WebView置于选择模式.让用户选择文本,然后触发某些内容以突出显示该文本.我可以通过从剪贴板中获取所选文本来使其工作,然后在Javascript中搜索它并突出显示它.当用户选择真正的常用词时会出现问题.我必须要么突出显示它们,要么以某种方式找出选择的位置以获得正确的选择.

我试过这个适用于iPhone的JavaScript.Bu getSelection()似乎不适用于Android.

function highlight(colour) {
    var range, sel;
    if (window.getSelection) {
            // Non-IE case
        sel = window.getSelection();
        if (sel.getRangeAt) {
            range = sel.getRangeAt(0);
        }
        document.designMode = "on";
        if (range) {
            sel.removeAllRanges();
            sel.addRange(range);
        }
            // Use HiliteColor since some browsers apply BackColor to the whole block
        if ( !document.execCommand("HiliteColor", false, colour) ) {
            document.execCommand("BackColor", false, colour);
        }
        document.designMode = "off";
    } else if (document.selection && document.selection.createRange) {
            // IE case
        range = document.selection.createRange();
        range.execCommand("BackColor", false, colour);
    }
} …
Run Code Online (Sandbox Code Playgroud)

javascript android webview

25
推荐指数
2
解决办法
9559
查看次数

"启用DOM存储API"是什么意思?

我遇到了这个Android WebView功能WebSettings.setDomStorageEnabled(true),仅凭名称我可以推断它只是"启用DOM存储".

但是,Android文档提示了一些略有不同的内容:

设置是否启用DOM存储API.

IOW,它启用API而不是存储本身.

我的问题是......在遇到这个函数之前,我不知道是否存在这样的API.

我的Google搜索表明此API与HTML5密切相关.

  1. 这是否意味着此功能与不使用HTML5的网站/页面无关?IOW,它是否会影响现有的非HTML5页面加载和渲染?
  2. 我在哪里可以了解有关DOM存储API的更多信息?
  3. 特别是,WebSettings.setDomStorageEnabled(true) 在使用Android应用程序时,我需要注意哪些问题或警告 ?
  4. 为什么默认禁用?

更新:我现在至少可以回答问题#2:事实证明"DOM存储"的通用名称是"Web存储",并且有一篇关于此的整篇维基百科文章:http://en.wikipedia.org/wiki/Web_Storage

html5 android dom webview

25
推荐指数
2
解决办法
3万
查看次数