在Android SDK 23中, onReceivedError(WebView view, int errorCode, String description, String failingUrl)已被弃用,并被onReceivedError(WebView view, WebResourceRequest request, WebResourceError error)所代替。 但是,如果我将手机置于飞行模式并在我的WebView上加载一个URL,则只会调用该方法的弃用版本。 onReceivedHttpError (WebView view, WebResourceRequest request, WebResourceResponse errorResponse)也没有用,因为它只检测高于500的错误,而且我得到了109状态码。 有没有一种不被弃用的方式来检测我的WebView无法加载?
当在谷歌search一个答案,似乎我不是唯一卡住了似乎无法解决的问题。 我设法用自定义的WebViewClient创build一个WebView – 这使我有可能有一个processdialog,并显示一个错误消息,如果无法加载的URL。 但是这造成了JavaScript的问题。 我正在加载的URL有一些JavaScript,它改变了一些HTML元素的CSS样式(显示或隐藏元素)或redirect到另一个位置onclick – 或者甚至想要显示一个警告框。 但通过使用WebViewClient这些都没有工作。 这是我如何加载页面: public void loadUrl(String url) { final ProgressDialog dialog = ProgressDialog.show(myActivity.this, "", getString(R.string.loading), true); final WebView myWebView = (WebView) findViewById(R.id.webview); myWebView.setVerticalScrollBarEnabled(false); myWebView.setHorizontalScrollBarEnabled(false); WebSettings webSettings = myWebView.getSettings(); webSettings.setJavaScriptEnabled(true); myWebView.setWebViewClient(new WebViewClient() { @Override public boolean shouldOverrideUrlLoading(WebView view, String url) { Toast.makeText(myActivity.this, url, Toast.LENGTH_SHORT).show(); //Debugging purposes if (url.endsWith(".mp4")) { […]
我的应用程序正在使用大量的Web浏览器,这些Web浏览器位于由ViewPager保存的片段中。 每当我滑过我的Galaxy Nexus上的应用程序与Jellybean上我一次又一次得到以下控制台消息: 08-23 13:44:03.374: E/webcoreglue(21690): Should not happen: no rect-based-test nodes found 任何人都可以向我解释什么是错的,以便我可以解决这个问题?
我喜欢用Chrome打包的应用程序replaceWindows 8 Metro应用程序。 目前,它需要模仿Metro应用程序的外观和感觉。 主页面包含多个横向排列的网页浏览,可以进行大量的横向滚动。 尝试使用触摸设备水平滚动时遇到问题。 如果滚动手势在web视图上开始,它将捕获滚动事件并阻止主机滚动。 溢出隐藏在所有的网页浏览。 由于它们构成页面上的大部分内容,因此主机的有效滚动目标是有限的。 webview的内容是互动的,所以我不能放弃在可滚动的内容上放置一个透明的覆盖来捕捉事件,至less不是没有某种方式将点击/触摸传播到webviews本身。 任何想法如何实现? 谢谢你的帮助!
我创build了自己的WebView并设置了WebChromeClient和WebViewClient对象。 当我启动这个WebView时,当我触摸它们(光标出现)时,HTML表单字段会作出反应,但是它们不会被选中,软键盘也不会启动。 如果我使用轨迹球来select窗体并按下它,键盘确实会出现。 我试图调用myWebview.requestFocusFromTouch()作为这个答案build议,但它返回false,并没有帮助。
我有一个以下设置为主题的活动: android:theme="@android:style/Theme.Dialog" 但是,在出现的活动对话框中有一个标题栏,它占用了我有的可用空间。 我怎样才能删除它?
public void onCreate(Bundle savedInstance) { super.onCreate(savedInstance); setContentView(R.layout.show_voucher); webView=(WebView)findViewById(R.id.webview); webView.getSettings().setJavaScriptEnabled(true); webView.getSettings().setBuiltInZoomControls(true); String url ="https://www.paymeon.com/Vouchers/?v=%C80%8D%B1x%D9%CFqh%FA%84%C35%0A%1F%CE&iv=%25%EE%BEi%F4%DAT%E1" //webView.loadUrl(url); // Not Working… Showing blank webView.loadUrl("http://www.yahoo.com"); // its working } 当我尝试在WebBView中加载一个URL时,它只显示一个空白的屏幕。 如果我加载Google.com或yahoo.com它工作正常。
我实际上是在Java编程新手,但我一直在解决我的问题的几个解决scheme,但没有find一个适合我的情况下,我似乎无法得到正确的代码。 我想有一个WebView ,当手机在线时打开在线页面(例如Google),当手机处于离线状态时打开本地HTML页面。 同时,尽pipe我希望手机在联机时覆盖本地页面,以便离线本地页面始终更新到最后一次手机连接到互联网。 任何想法如何做到这一点? 一些简单的指向正确的方向可能会有所帮助。 非常感谢。
现在我想显示一些unicode字符,并使用了<font face=" Arial">something here</font>标签。 但似乎WebView无法findArial字体,因为我只能看到不明飞行物字符。 我必须将arial.ttf复制到某个地方,或者如何在WebView使用这种TrueType字体? 谢谢。
简洁版本 如何检测Android WebView是否消耗触摸事件? onTouchEvent总是返回true,并且从不触发WebViewClient的onUnhandledInputEvent 。 详细版本 我有一个TwoDScrollView内的多个WebViews。 顾名思义,TwoDScrollView既可以垂直滚动也可以水平滚动。 TwoDScrollView的内容可以放大/缩小。 当用户拖动他的手指或使用捏缩放,我想分配触摸事件: WebView如果其内容是可滚动/可缩放的(即只有WebView的内部将滚动/缩放) TwoDScrollView如果上述条件为false(TwoDScrollView的所有内容将滚动/缩放) 我已经通过使用canScrollHorizontally和canScrollVertically方法部分实现了这一点。 但是这些方法只适用于“本地滚动”。 但是,在某些情况下,WebView中的一些JavaScript会消耗触摸事件,例如Google地图。 在这种情况下,这些方法返回false。 有什么方法可以查明WebView的内容是否消耗触摸事件,即可滚动/可缩放吗? 我无法更改WebView的内容,因此我的问题与此不同。 我已经考虑通过evaluateJavaScript方法在Webview中执行一些JavaScript来检查触摸处理程序,但根据这个答案 ,没有简单的方法来实现这一点,也可以有一些其他嵌套的iframe。 任何帮助将不胜感激。 我已经试过了 我onTouchEvent了WebView的onTouchEvent并且读取了总是返回true的super.onTouchEvent() ,不pipe怎样。 如上所述, canScrollHorizontally和canScrollVertically只能部分地解决这个问题 onScrollChanged也没有用 WebViewClient.onUnhandledInputEvent从不被触发 我考虑通过evaluateJavaScript使用JavaScript,但这是一个非常复杂和难看的解决scheme 我试图通过Debug.startMethodTracing来跟踪Debug.startMethodTracing 。 我发现它传播如下: android.webkit.WebView.onTouchEvent com.android.webview.chromium.WebViewChromium.onTouchEvent com.android.org.chromium.android_webview.AwContents.onTouchEvent com.android.org.chromium.android_webview.AwContents$AwViewMethodsImpl.onTouchEvent com.android.org.chromium.content.browser.ContentViewCore.onTouchEventImpl 根据ContentViewCore的源代码 ,触摸事件以nativeOnTouchEvent本地方法nativeOnTouchEvent ,我不知道会发生什么。 无论如何, onTouchEvent总是返回true,即使有可能find事件是否被消耗,也需要使用私有方法,这也是相当丑陋的。 注意 我不需要知道如何拦截发送给WebView的触摸事件,但WebView是否正在使用它们,即正在使用它们做任何事情,例如滚动,拖动等。