Articles of webview

如何获取Webview iframe链接以启动浏览器?

我正在使用WebView显示一个页面,其中html包含一个iframe,其中src =“xxxxx.php”。 此iframe作为带有基础链接的广告图片加载。 如果我点击该图像(链接),它会尝试在原始iframe中加载新页面(在该小空间中不会显示太多)。 我想要发生的是点击链接在新的浏览器窗口中打开引用的页面,保持我的应用程序不变。 如果我使用Android浏览器显示原始页面并单击此iframe,则会将链接加载为新页面。 如何使用WebView获得相同的行为? 使用带有shouldOverrideUrlLoading()的WebViewClient似乎不会被iframe链接调用。

如何在webView URL上处理intent://?

我目前正在开发一个带有webView的Android应用程序。 在一些urls我需要使用shouldOverrideUrlLoading方法,这非常简单: if(url.startsWith(“something”)){ //do something return true; } 我的问题: 例如,Google搜索上的某些URL具有以下URL方案: intent://en.m.wikipedia.org/wiki/Test_cricket#Intent;scheme=http;package=org.wikipedia;S.browser_fallback_url=https%3A%2F%2Fwww.google.pt%2Fsearchurl%2Fr.html%23app%3Dorg.wikipedia%26pingbase%3Dhttps%3A%2F%2Fwww.google.pt%2F%26url%3Dhttps%3A%2F%2Fen.m.wikipedia.org%2Fwiki%2FTest_cricket;S.android.intent.extra.REFERRER_NAME=https%3A%2F%2Fwww.google.pt;launchFlags=0x8080000;end 我尝试过使用: Intent browserIntent = new Intent(Intent.ACTION_VIEW, Uri.parse(url)); startActivity(browserIntent); 但是我收到了一个错误: 10-15 15:18:15.546: W/System.err(29086): android.content.ActivityNotFoundException: No Activity found to handle Intent { act=android.intent.action.VIEW dat=intent://en.m.wikipedia.org/wiki/Test_cricket } 我该如何处理这种URL方案? 更新: 在@CommonsWare评论之后,我尝试在Intent上使用parseUri()从URL创建一个Intent object ,然后尝试使用startActivity() ,例如: Intent myIntent = new Intent().parseUri(url, Intent.URI_INTENT_SCHEME); startActivity(myIntent); 但我仍然得到: android.content.ActivityNotFoundException: No Activity found to handle Intent […]

删除webview的焦点叠加颜色

我有一个加载网站的WebView ,一旦我按下该网站的一些元素,WebView就会在按下的元素上放置某种蓝色覆盖。 反正有没有删除此行为? 提前致谢!

在Webview上禁用双击缩放/取消缩放

在Android上,我正在使用webview来显示由API flot设计的图表。 我正在使用此代码: super.onCreate(savedInstanceState); this.requestWindowFeature(Window.FEATURE_NO_TITLE); this.getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN); setContentView(R.layout.graphique); // Get a reference to the declared WebView holder WebView webview = (WebView) this.findViewById(R.id.webView1); // Get the settings WebSettings webSettings = webview.getSettings(); // Enable Javascript for interaction webSettings.setJavaScriptEnabled(true); // Make the zoom controls visible //webSettings.setBuiltInZoomControls(true); // Allow for touching selecting/deselecting data series webview.requestFocusFromTouch(); // Set the client […]

从WebView获取位图会导致OutOfMemory崩溃

我有一个自定义WebView ,我想获得其内容的位图(包括屏幕外)。 我使用了这段代码,我从这里得到了 : public static Bitmap getBitmapFromWebviewV2(WebView webView) { webView.measure(View.MeasureSpec.makeMeasureSpec( View.MeasureSpec.UNSPECIFIED, View.MeasureSpec.UNSPECIFIED), View.MeasureSpec.makeMeasureSpec(0, View.MeasureSpec.UNSPECIFIED)); webView.layout(0, 0, webView.getMeasuredWidth(), webView.getMeasuredHeight()); webView.setDrawingCacheEnabled(true); webView.buildDrawingCache(); Bitmap bm = Bitmap.createBitmap(webView.getMeasuredWidth(), webView.getMeasuredHeight(), Bitmap.Config.ARGB_8888); Canvas bigcanvas = new Canvas(bm); Paint paint = new Paint(); int iHeight = bm.getHeight(); bigcanvas.drawBitmap(bm, 0, iHeight, paint); webView.draw(bigcanvas); return bm; } 当我放大很多时,它工作正常,在这种情况下,我得到OutOfMemory Crash。 我用相同的图片(稍微放大并缩放到最大值)测试了它,它的行为与我上面提到的相同。 我试图通过添加来解决这个问题 while(webView.canZoomOut()){ webView.zoomOut(); […]

尝试从磁盘加载资源时,Android WebView会抛出“仅支持http的跨源请求”exception

我用html / js开发了一个单页游戏,我试图在android webview中托管它。 我有一个文件夹src/main/assets/www/和这行代码来引导我的应用程序: mWebView.loadUrl(“file:///android_asset/www/index.html”); index.html加载了一个app.js文件,这是我的游戏。 当我尝试从app.js发出xhr请求以获取assets/myimage.svg (物理位置src/main/assets/www/assets/myimage.svg ): var xhr = new XMLHttpRequest(); xhr.open(‘get’, ‘assets/myimage.svg’, true); xhr.send(); 我收到此错误: cross origin requests are only supported for http 。 为什么这是一个跨源请求? 我该怎么做才能解决这个问题? 我无法在http网络服务器上托管svg,也无法在app.js内联它 – 它必须从磁盘加载。

当子视图的内容发生更改时,滚动视图不会resize

我在ScrollView有一个WebView 。 WebView的内容在显示不同的html页面时会发生变化。 我有以下问题: 例如,我有A.html和B.html 。 B.html的内容大于A.html ,因此页面更长。 当WebView加载B.html ,ScrollView会扩展其大小以启用自身滚动B.html,然后如果我回到A.html ,ScrollView不会自行resize。 (滚动区域超出A.html的内容) 我想要的是动态更改滚动视图的滚动区域以适应webview的内容。

WebView + WebChromeClient方法onCreateWindow没有调用target =“_ blank”

我正在尝试使用Android API level 10 (sdk 2.3.3)使用WebView开发custom browser ,遗憾的是我不知道如何拦截来自webpage请求以在新的浏览器窗口中打开URL,例如点击与target=”_blank”链接target=”_blank” 。 根据API Doc我已经覆盖了WebChromeClient的onCreateWindow ,但是在点击这样的链接时不会调用它。 可能是这个API级别的错误? 我还重写了shouldOverrideUrlLoading以避免WebView在内置浏览器中打开后续链接。 以下是我打开google.com示例代码。 要测试它,请点按“新闻”,然后点按任何新闻标题。 Android内置浏览器通常在新的browser window打开它。 package com.myexample; import android.app.Activity; import android.os.Bundle; import android.os.Message; import android.util.Log; import android.webkit.WebChromeClient; import android.webkit.WebView; import android.webkit.WebViewClient; import android.widget.Toast; public class HelloAndroidActivity extends Activity { private static String TAG = “WebViewTest”; private WebView mWebView; @Override public void onCreate(Bundle […]

Android Webview,设置长链单独启用链接?

与Chrome和Firefox等其他浏览器类似,我需要用户长按链接然后显示上下文菜单,但如果他们长时间点击某些内容并且它不是链接,则不执行任何操作。 使用registerForContextMenu(myWebView); 允许长按任何我不想要的对象。 因此,我认为需要从registerForContextMenu(myWebView);过滤掉对象registerForContextMenu(myWebView); 或解析html的链接似乎有点过分。 我也试过覆盖shouldOverrideUrlLoading方法: private boolean isLongClicked = false; this.webView.setWebViewClient(new WebViewClient() { @Override public boolean shouldOverrideUrlLoading(WebView view, String url) { if(isLongCLicked){ //do something }else view.loadUrl(url); return true; } }); webView.setOnLongClickListener(new OnLongClickListener() { @Override public boolean onLongClick(View v) { isLongClicked = true; forumView.performClick(); isLongCLicked = false; return false; } }); 我已经看过这个线程在WebView中启用longClick但它没有帮助我。 我尝试实施它,但我得到一个力量关闭。 import android.content.Context; […]

Android WebView setCertificate发出SSL问题

我看过很多关于SSL错误的post和信息,我自己偶然发现了一个。 我试图通过带有GlobalSign CA BE证书的Android WebView访问网页,我收到了一个不可信的错误。 对于大多数手机来说,它可以正常处理这个问题,并告诉处理程序继续。 但是,有些手机最终会在webview-client中收到onReceivedError,告诉它无法与服务器建立联系。 这是在经过onReceivedSslError并继续进行之后发生的。 我搜索了一些描述并find了很多涉及HttpClient的描述,并且安装了你自己的证书,或者只是欺骗它接受所有。 但是,由于我使用的是WebView,我以为我会使用WebView.setCertificate(SslCertificate crt)。 我搜索了这个函数的讨论,但没有find太多/任何信息。 我拿到了据说不受信任的证书,并且执行了以下代码: try{ Certificate myCert = CertificateFactory.getInstance(“X509”). generateCertificate(this.getResources(). openRawResource(R.raw.globalsign_ca_be)); X509Certificate x509 = (X509Certificate) myCert; SslCertificate sslCert = new SslCertificate(x509); webView.setCertificate(sslCert); } catch (CertificateException ex){ ex.printStackTrace(); } 使用包含以下内容的.cer文件: —– BEGIN CERTIFICATE —– MIIEbjCCA1agAwIBAgILBAAAAAABElatYgQwDQYJKoZIhvcNAQEFBQAwVzELMAkG A1UEBhMCQkUxGTAXBgNVBAoTEEdsb2JhbFNpZ24gbnYtc2ExEDAOBgNVBAsTB1Jv b3QgQ0ExGzAZBgNVBAMTEkdsb2JhbFNpZ24gUm9vdCBDQTAeFw0wNzA1MDQxMDAw MDBaFw0xNDAxMjcxMTAwMDBaMHExCzAJBgNVBAYTAkJFMR0wGwYDVQQLExREb21h aW4gVmFsaWRhdGlvbiBDQTEZMBcGA1UEChMQR2xvYmFsU2lnbiBudi1zYTEoMCYG A1UEAxMfR2xvYmFsU2lnbiBEb21haW4gVmFsaWRhdGlvbiBDQTCCASIwDQYJKoZI hvcNAQEBBQADggEPADCCAQoCggEBALSfSeaznwFVNtA2lWzLFlpscrXineL6OekK 3HNcoDt2bQUokw2lQvPoy + 7TMxoTJwrfXNFUYmqaFzbWPFiHHrJmH1VpK4lWR7TC UAzlXcH9KRtmc0P0b9EUTyptSFI69eSQP96y9BDV + fqslg0QMiPS01GnlYVQ […]