Articles of webview

在android中显示webview的缓存版本

我试图让网站的HTML5离线缓存版本在webview内部网络时显示。 我已经覆盖了onReceivedError ,当网络关闭时,会调用此方法。 问题是它显示通用的“网页不可用”消息。 如何让它显示HTML5缓存版本的页面? webapp的离线存储肯定有效,因为它在桌面版Firefox和Chrome中运行良好。 我知道我可以在onReceivedError手动调用loadData到视图中,但我不确定从哪里可以获取HTML5缓存值。 注意:如果我在loadData设置一些虚拟数据,例如view.loadData(Uri.encode(” Page load failed “), “text/html”, “UTF-8”); 然后单击返回(通过检测后退事件并调用webview.goBack();然后显示页面的缓存版本。 以下是我为设置webview添加的一些代码行: webview.getSettings().setCacheMode(WebSettings.LOAD_DEFAULT); webview.getSettings().setAppCacheMaxSize(1024*1024*8); webview.getSettings().setAppCachePath(“/data/data/com.stuff.android/cache”); webview.getSettings().setAllowFileAccess(true); webview.getSettings().setAppCacheEnabled(true); webview.getSettings().setDomStorageEnabled(true); webview.getSettings().setJavaScriptEnabled(true);

如何将JSON格式的数据从WebView传递到HTML页面

我试图将JSON格式的数据从我的Android WebView传递到HTML页面。 但是,每当我尝试解析原始JSON数据时应用程序崩溃,我希望格式为{“key”:”data”} 我的应用程序的目标是解释此JSON数据,将其形成一个值数组,并将其发送到HTML页面。 这是正确的方法吗? 这是我的WebView代码…… public class MyWebView extends Activity { WebView mWebView; public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.web_view); mWebView = (WebView) findViewById(R.id.webviewSch); mWebView.getSettings().setJavaScriptEnabled(true); mWebView.addJavascriptInterface(this, “webConnector”); mWebView.loadUrl(“file:///android_asset/table.html”); } public String load() { return “{\”key\”:\”data\”}”; } } 这是HTML代码…… Test function loader() { var jsonData = window.webConnector.load(); } Do nothing 这是日志猫: 04-15 00:35:44.551: W/dalvikvm(442): JNI […]

Android NDK:从源代码编译自定义WebView

我的目标是在Android中创建一个WebView的修改版本(称之为WebViewCustom),供我个人在我的应用程序中使用。 WebView是基于WebKit的,所以我需要通过NDK在C中编译它。 我现在对参与开源Android项目不感兴趣,所以我的需要就是能够编译WebView的原始C源并将其用作我的Android应用程序中的自定义控件(SDK和NDK都是可能的环境)对于应用程序)。 我认为没有GIT WebKit的东西我可能不感兴趣,但我不是Android和WebKit项目的专家。 是否可以只编辑和编译WebView代码并将其作为新控件放入我的应用程序中? 你能告诉我这项任务的主要步骤吗?

Android:Flash内容会破坏WebView边界并重叠本机布局元素

我正在使用WebView来显示一个包含一些Flash内容的网页,这些内容基本上运行得很好。 最大的问题是,Flash内容似乎没有考虑WebView的界限:即使WebView太小而无法显示完整页面且Flash内容不在WebView的边界内,也会显示Flash内容。 此外,此Flash内容将覆盖WebView旁边显示的其他(本机)布局元素。 对我来说,似乎Flash内容是在(特殊)z-Layer中呈现的,它覆盖了所有其他布局元素。 经过测试:Android 2.2和Flash 10.1。 这是Adobes Flash player 10.1中的已知错误吗?

如果没有连接,Android WebView不会加载缓存的网站

我正在尝试缓存WebView中加载的网站,但如果网络连接关闭,我无法使其正常工作。 创建了Cachdirectory,缓存文件就在那里。 权限给出。 我加载WebPage然后关闭网络(也给出了WI-FI权限),我收到错误,因为我正在尝试重新加载页面(现在它应该从缓存加载)。 请帮忙! 这是代码: WebView engine=(WebView)findViewById(R.id.web_engine); engine.getSettings().setJavaScriptEnabled(true); engine.getSettings().setBuiltInZoomControls(true); engine.getSettings().setLoadsImagesAutomatically(true); engine.getSettings().setJavaScriptCanOpenWindowsAutomatically(true); engine.setInitialScale(1); engine.setWebViewClient(new WebViewClient()); engine.setWebChromeClient(new WebChromeClient() { @Override public void onReachedMaxAppCacheSize(long spaceNeeded, long totalUsedQuota,QuotaUpdater quotaUpdater) { quotaUpdater.updateQuota(spaceNeeded * 2); } public void onProgressChanged(WebView view, int progress) { activity.setTitle(“Loading…”); activity.setProgress(progress * 100); if(progress == 100) { activity.setTitle(R.string.app_name); } } }); String appCachePath; engine.getSettings().setDomStorageEnabled(true); // Set […]

将原生页脚视图添加到webview

我有一个WebView和一个本地自定义视图,我想在WebView下面添加。 我已经尝试将WebView包装在ScrollView ,虽然这正是我想要的,但滚动性能确实很滞后,如果用户甩动滚动点击屏幕并不会像它应该那样停止投掷。 我想的另一种方法是将WebView扩展为包装器FrameLayout并在WebView顶部显示我的页脚视图,然后以某种方式扩展WebView高度以适应页脚大小,将页脚视图推到WebView高度的末尾,然后监视WebView的滚动以使用它移动页脚。 我已经设置了基类,我的问题是在WebView扩展可滚动内容,然后将页脚推到WebView内容的底部; 主要问题是WebView不是典型的android视图,页面内容是异步加载的(因此内容大小也会发生变化)。 如何扩展WebView的可滚动内容? 如何在WebView内容下面设置本机页脚? 编辑: 我实际上并不使用xml,视图是用这样的代码构造的: public class WebViewWithFooter extends FrameLayout { private ObservableWebView mWebView;//webview with scroll methods overridden for access private FrameLayout mFooterContainer; public WebViewWithFooter(Context context) { super(context); init(); } public WebViewWithFooter(Context context, AttributeSet attrs) { super(context, attrs); init(); } public WebViewWithFooter(Context context, AttributeSet attrs, int defStyle) { super(context, attrs, […]

在Android WebView中读取键盘事件

我正在尝试在android web视图中收听关键事件。 用户填写表单时的示例,我应该收到关键事件。 这是我的WebView代码 public class MyWebView extends WebView implements OnKeyListener { ….. @Override public boolean onKeyDown(int keyCode, KeyEvent event) { Log.i(“PcWebView”, “onKeyDown keyCode=” + keyCode); return super.onKeyDown(keyCode, event); } @Override public boolean onKeyUp(int keyCode, KeyEvent event) { Log.i(“PcWebView”, “onKeyUp keyCode=” + keyCode); return super.onKeyUp(keyCode, event); } @Override // Listener is initialized in the constructor […]

存储WebView以进行脱机浏览

加载页面后,强制Android将webview存储到媒体的最佳方法是什么? 更多细节: 每个页面都将丰富的图像,脚本和样式。 每页大约0.5到1兆字节。 一旦调用OnFinishedLoading Override,它们将被保存。 最好将其保存到SD卡,然后使用本地仓库将其打开备份。 不确定我是否应该只为webview使用sql数据库,或者采用每个视图并写出文件。 如果我做后者,那么最简单的方法是什么,所以我不必写一个完整的webcrawler来连接每个文件?

android:ZoomPicker打破了onTouchListener

我有一个webview,它使用内置的缩放控件,如下所示: wv = new WebView(this); wv.getSettings().setBuiltInZoomControls(true); 注意:这会激活两个主要function – 缩放到缩放和invokeZoomPicker()(后者仅在视图上执行滑动操作时调用,简单触摸不启用它) 并且我还希望在触摸事件发生时发生事情,使用以下内容 wv.setOnTouchListener(new View.OnTouchListener() { public boolean onTouch(View v, MotionEvent event) { Log.i(“touch”, “touched!”); return false; } }); 当WebView加载并点击屏幕时,每当我与屏幕交互时,日志都会按预期进行“触摸”。 但是,如果我做了一些会引发invokeZoomPicker()的事情(捏缩放似乎不会导致此问题,只要缩放小部件没有出现),onTouchListener就会停止响应我的点击(即使几秒钟后) ,当小部件从视图中消失时)。 为了确保它是invokeZoomPicker(),我编辑了我的代码的第二部分,如下所示: wv.setOnTouchListener(new View.OnTouchListener() { public boolean onTouch(View v, MotionEvent event) { wv.invokeZoomPicker(); Log.i(“touch”, “touched!”); return false; } }); 这个新的onTouch方法现在只触发一次(因此zoomwidget出现在视图上 – 并在几秒钟后消失),然后在重新加载视图之前不会再次调用onTouch方法 – 所以它肯定是invokeZoomPicker()/ Zoom小部件的问题 我是否错过了一些允许它们共存的重要代码,或者我只需要选择哪一个我可以不用的代码?

onData上的Android空白屏幕在loadDataWithBaseURL中

可能它会有一个简单的解决方案,但我在这里阅读了很multithreading,但没办法。 在ListView中,如果我点击一行它会打开一个新的活动。 在那个活动中,我创建了一个httpget,然后我从httpget(检索到的网页的一部分)创建了一个html字符串。 所以我只需要创建一个loadDataWithBaseURL(“http://base_path.com/”, html, mime, encoding, null) 。 它按预期工作,我查看带有链接和图像的网页。 现在问题来了……如果我点击图像,我会看到窗口中的大图像,但是一旦我按下手机上的“背面”,我就会看到一个白页。 我知道它是由“null”参数引起的,但是…我应该再次看到html页面了吗? 我试图把“html”而不是null但是我在webview中看到了html代码! 这是我的onKeyDown来覆盖后退按钮: @Override public boolean onKeyDown(int keyCode, KeyEvent event) { // Check if the key event was the BACK key and if there’s history if ((keyCode == KeyEvent.KEYCODE_BACK) && webView.canGoBack()) { webView.goBack(); return true; } // If it wasn’t the BACK key or […]