Articles of webview

视图太大,无法适应scrollview内Webview上的绘图缓存

我正在开发一个包含webview的scrollview,它在2.3,4.1上工作得很完美,但是当我在4.4模拟器上尝试它时,它显示 View too large to fit into drawing cache, needs 5744640 bytes, only 3932160 available webview只是空白。 这是布局 我试图使用mywebView.setDrawingCacheEnabled(false); 但它只是返回相同的警告。 此外,我发现当网页超大屏幕时会出现问题,但是当我显示它时,我发现网页的布局略有不同,在2.3,4.1中,如果单词超出页面,它可以简单地启动新行然而,在4.4它没有,所以这个词的一部分是在屏幕之外。 怎么解决? 谢谢

Webview Localhost Connection拒绝使用10.0.2.2地址

我只是在Android模拟器上制作一个基本的Webview应用程序,无法连接到我的计算机上托管的网站。 这是我的代码: Android清单: 主要活动Java文件: public class MainActivity extends Activity { private WebView webView; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); if (android.os.Build.VERSION.SDK_INT > 9) { StrictMode.ThreadPolicy policy = new StrictMode.ThreadPolicy.Builder().permitAll().build(); StrictMode.setThreadPolicy(policy); System.out.println(“*** My thread is now configured to allow connection”); } setContentView(R.layout.activity_main); webView = (WebView) findViewById(R.id.webView); webView.loadUrl(“http://10.0.2.2:8080”); } 终端(在本地主机端口8080上启动网站): Michaels-MacBook-Pro-5:web michael$ php -S localhost:8080 PHP […]

在全屏模式下,Android软键盘可隐藏CordovaWebView的输入

我有一个CordovaWebView,它提供了一些html表单。 当我专注于输入字段时,会popupAndroid的软键盘,对于某些字段,根据它们的位置,它会在它上面显示。 基本上,它没有调整CordovaWebView的布局。 无论我做什么,我都无法改变这一点,据说这与CordovaWebView处于全屏模式的事实有关。 我怎样才能解决这个问题? PS:不是吗,不是吗? 谢谢你们!

不会因404错误而调用Android WebViewClient onReceivedError

嗨 在列表视图中我有一个webview应该从服务器加载图像文件,当没有图像存在时,我需要一个虚拟图像。我试过 holder.image.setWebViewClient(new WebViewClient() { @Override public void onReceivedError( WebView view, int errorCode, String description, String failingUrl) { System.out.println(“description error” + description); view.setVisibility( View.GONE ); } @Override public void onPageFinished(WebView view, String url) { view.setVisibility( View.VISIBLE ); } }); 我在FrameLayout中有一个虚拟图像的webview,在每个图像url加载后调用onPageFinished监听器,但是没有为产生404错误的url调用onReceivedError。任何猜测如何做。

在WebView中处理屏幕旋转

我的网络应用程序在Chrome中运行良好,可以很好地处理配置更改(例如屏幕旋转)。 一切都完好无损。 在我的Android应用程序中将我的Web应用程序加载到WebView中时,Web应用程序会在屏幕方向更改时失去状态。 它确实部分保留了状态,即它保留了表单元素的数据,但是所有JavaScriptvariables和DOM操作都会丢失。 我希望我的WebView能够像Chrome一样运行,即完全保留状态,包括任何JavaScriptvariables。 需要注意的是,虽然Chrome和WebView源自相同的代码库,但Chrome内部不使用WebView。 屏幕方向更改发生的变化是Activity(以及任何最终的Fragments)被破坏然后重新创建。 WebViewinheritance自View并覆盖onSaveInstanceState和onRestoreInstanceState方法以处理配置更改,因此它会自动保存和恢复任何HTML表单元素的内容以及后退/前进导航历史状态。 但是,不保存和恢复JavaScriptvariables和DOM的状态。 提出的解决方案 已经提出了一些解决方案。 所有这些都是非工作的,只保留部分状态或其他方式不理想。 为WebView分配id WebViewinheritance自View ,它具有方法setId ,也可以使用元素声明中的android:id属性在布局XML文件中声明。 这对于保存和恢复状态是必要的,但是状态仅部分恢复。 这将恢复表单输入元素,但不恢复JavaScriptvariables和DOM的状态。 onRetainNonConfigurationInstance和getLastNonConfigurationInstance 从API级别13开始, 不推荐使用 onRetainNonConfigurationInstance和getLastNonConfigurationInstance 。 强制屏幕方向 通过为AndroidManifest.xml文件中的元素设置screenOrientation属性或通过setRequestedOrientation方法,可以强制Activity强制其屏幕方向。 这是不希望的,因为它打破了屏幕旋转的期望。 这也只涉及屏幕方向的变化而不是其他配置变化。 保留片段实例 不起作用。 在片段上调用方法setRetainInstance会保留片段(它不会被破坏),因此片段的所有实例variables都会被保留,但它会破坏片段的视图,因此WebView会被破坏。 手动处理配置更改 可以为AndroidManifest.xml文件中的Activity声明configChanges属性,如android:configChanges=”orientation|screenSize” ,通过阻止配置更改来处理配置更改 。 这样可以防止活动被破坏,从而完全保留了WebView及其内容。 然而,这是不鼓励的,并且据说仅作为最后的解决方案使用,因为它可能导致应用程序以微妙的方式打破并且变得越来越多。 设置configChanges属性时,将调用configChanges方法。 MutableContextWrapper 我听说可以使用MutableContextWrapper ,但我没有评估这种方法。 saveState()和restoreState() WebView具有saveState和restoreState方法。 请注意,根据文档, saveState方法不再存储WebView的显示数据,无论这意味着什么。 无论哪种方式,这些方法似乎都不能完全保留WebView的状态。 WebViewFragment WebViewFragment只是一个为您包装WebView的便利片段,因此可以轻松地使用更少的样板代码,就像ListFragment 。 它没有做任何额外的状态保留完全保持状态。 题 是否有任何真正的解决方案来解决WebView被破坏并在配置更改时丢失其状态的问题? (如屏幕旋转) 一种完全保留所有状态的解决方案,包括JavaScriptvariables和DOM操作。 一个干净且不基于黑客或弃用方法的解决方案。

Android WebView不尊重缩放百分比

我有一个WebView ,我试图在加载页面时将其扩展到一定的百分比。 该软件的iPhone版本使用HTML元标记: 由于Android的WebView似乎不尊重该标签,因此我使用setInitialScale()对百分比进行了硬编码。 但是,WebView只是忽略了这种方法调用。 不管我放在那里的数字是100%。 想法? 更新:它不能在模拟器,我的Droid(摩托罗拉)或我的G1(HTC)上运行。

WebView没有填满设备或模拟器的整个屏幕

我正在开发一个Android应用程序,它在启动时加载Web应用程序。 为了达到我使用webview控件的目的。 我希望我的webview能够全屏显示,以便为用户提供原生的感觉。 我尝试了所有方法来全屏显示webthview但没有任何工作。 我不知道我错过了什么。 我需要帮助。 下面我发布了我尝试过的代码片段,附上了截图,显示了webview如何在模拟器和移动设备上显示。 方法1:尝试简单的基本代码 webbrowser.setWebViewClient(new MyWebViewClient()); webbrowser.getSettings().setJavaScriptEnabled(true); webbrowser.loadUrl(“http://google.com”); private class MyWebViewClient extends WebViewClient { @Override public boolean shouldOverrideUrlLoading(WebView view, String url) { view.loadUrl(url); return true; } 方法2:在清单文件中尝试将主题设置为全屏 方法3:尝试使用代码完成它 //Full screen requestWindowFeature(Window.FEATURE_NO_TITLE); this.getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN); 方法4:尝试使用ChromeClient mWebView.setWebChromeClient(new MyWebChromeClient()); mWebView.addJavascriptInterface(new DemoJavaScriptInterface(), “demo”); mWebView.loadUrl(“http://google.com/”); 方法5:尝试在main.xml中定义没有布局的webview 方法6:还通过将webview边缘与父对齐对齐来尝试相对布局 没有什么对我有用。 我正在测试的设备是三星galaxy选项卡,模拟器是Android 2.3.3。 在7英寸的星系标签中,它出现在中间,四边有空白区域。 而在模拟器中它的底部留有空间。 如果有人可以指导我,我真的很感激。

Android Webview:禁用CORS

Android是否允许本机应用程序禁用http://(非本地/文件)请求的CORS安全策略? 在我的原生应用程序中,webview通过http://显示远程html,而不是本地/文件系统。 这似乎与网络浏览器中的CORS限制相同。 Worakround:一个native-js桥接器,用于ajax请求跨域,没有Access-Control-Allow-Origin: *是我的quick’n’irt解决方案。 (jsonp或服务器端代理不是一个选项,因为web服务检查客户端的cookie + ip。) 是否可以针对inapp网络视图禁用此政策? 请告诉我,如果有一个简单的标志允许js绕过这个限制,限制了“原生”应用程序的webview。

Android webview SKIPS javascript甚至包含setJavascriptEnabled(true)和WebChromeClient

(使用三星Galaxy Tab和Android 3.0,这适用于每个3.0+平板电脑,就像在浏览器中一样,而不是webview) 我有一个CSS和jQuery的页面在浏览器,Android浏览器和iOS设备中加载很好,但android webview拒绝一致地加载它。 我已经把问题缩小到简单地跳过javascript加载(通过复制一些webview javascript演示应用程序的问题)。 为什么是这样? 这是完整的测试HTML代码http://pastebin.com/GmE2vEYx 这就是我如何称呼它: myWebview.loadUrl(“file:///android_asset/myPage.html”); myWebview.getSettings().setJavaScriptEnabled(true); myWebview.setWebChromeClient(new WebChromeClient()); 这三个调用的顺序不会影响结果。 myWebview.getSettings().setJavaScriptEnabled(true); myWebview.setWebChromeClient(new WebChromeClient()); myWebview.loadUrl(“file:///android_asset/myPage.html”); 我注意到的一件事是,如果你给它时间(通过在调试器中暂停应用程序断点),那么javascript将更加一致地加载。 这导致我尝试使应用程序加载速度较慢的一些牵强附会的实验,但这实际上不是所需的用户体验。 我真的希望Android webview真的不是移动开发的IE6。 其他事实: 如果删除包含所有Jquery的标记,则页面会快速加载所有CSS格式。 一旦添加了Jquery,就什么都没有加载。 我还发现了其他几个遇到完全相同问题的问题,许多问题没有得到答复,或者没有对OP正在寻求的答案给出明确答案:( 看: Android:即使使用setJavaScriptEnabled(true)也无法让javascript在WebView上运行 页面重新加载(Webview.loadUrl)导致Javascript未被(完全)处理 http://groups.google.com/group/android-developers/browse_thread/thread/9962064ef217a5a7# JavaScript有时在android的webview中不起作用 Android WebView没有加载JavaScript文件,但Android浏览器加载它很好 Android的Webview无法处理javascript? 建议? 让我们来到这个底部! android文档说webview有局限性,但我不知道那个限制在哪里,因为人们一直在制作HTML CSS JS应用程序!

如何使用webview下载文件? (这种情况很奇怪)

我想通过使用webview从网站下载文件(例如.mp3),但问题是每当我点击链接时,它将打开浏览器(默认一个),它在关闭之前出现一秒。 并且没有下载任何文件。 这是我的代码, import android.app.Activity; import android.content.Intent; import android.net.Uri; import android.os.Bundle; import android.webkit.WebView; import android.webkit.WebViewClient; import android.webkit.WebChromeClient; import android.view.Menu; import android.view.View; import android.view.View.OnClickListener; import android.webkit.DownloadListener; import android.widget.Button; import android.widget.TextView; public class Main extends Activity { WebView webview; Button bt_search; TextView txt_search; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); webview = (WebView) findViewById(R.id.webView); webview.setWebChromeClient(new WebChromeClient()); […]