Articles of webview

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

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

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

我试图cachingWebView中加载的网站,但如果networking连接closures,我不能得到它的工作。 Cachdirectory被创build,caching文件在那里。 权限被给出。 我加载网页,然后closuresnetworking(WI-FI的权限也给出),我得到错误,因为我正在尝试重新加载页面(现在它应该从caching中加载)。 帮助! 这里是代码: 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 […]

Android:Flash内容会打破WebView边界并重叠原生布局元素

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

CookieSyncManager :: createInstance()需要在CookieSyncManager :: getInstance()之前调用

这个错误信息很清楚: CookieSyncManager :: createInstance()需要在CookieSyncManager :: getInstance()之前调用 但是我只是得到这个错误,因为我遵循了官方文档 : 要使用CookieSyncManager,主应用程序必须在应用程序启动时调用以下内容: CookieSyncManager.createInstance(context) 要设置同步,主机应用程序必须调用 CookieSyncManager.getInstance().startSync() 在Activity.onResume() 只有当应用程序尝试恢复时,才会发生错误,而不是在干净地启动时发生。 所以,我可以通过将CookieSyncManager.createInstance(context)移动到Activity.onResume()来解决这个问题,但是…不会产生新的问题吗? (例如,每次应用程序恢复时都忘记以前的会话cookie?)

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

我想从我的Android WebView传递JSON格式的数据到一个HTML页面。 但是,每当我尝试parsing原始的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代码… <html> <head> <title>Test</title> <script type="text/javascript"> function loader() { var jsonData = window.webConnector.load(); } </script> </head> <body […]

将原生页脚视图添加到webview

我有一个WebView和一个本机自定义视图,我想在WebView下添加。 我试过在ScrollView包装WebView ,而这正是我想要的,滚动性能真的很滞后,如果用户滑动滚动轻敲屏幕不会停止像它应该的投掷。 我想的另一种方法是膨胀WebView到一个包装的FrameLayout与我的页脚视图顶部的WebView ,然后以某种方式扩展WebView高度,以适应页脚的大小,推到页脚视图到WebView的高度和然后监视WebView的滚动以移动页脚。 我已经设置了基类,我的问题是扩展WebView的可滚动内容,然后将页脚推到WebView内容的底部; 主要问题是WebView不是你典型的android视图,而是页面内容asynchronous加载(因此内容大小发生变化)。 我如何扩展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, […]

如何在打开Android键盘时使我的cordova应用程序全屏?

我创build了一个Cordova应用程序,并在Nexus 4上进行testing。我已经使用了Cordova CLI工作stream程中列出的基本步骤来启动和运行。 我也修改了我的config.xml: <preference name="Fullscreen" value="true" /> 我的应用程序按预期运行全屏。 只要我点击一个input字段,键盘会按照预期滑动,但是android的黑色顶部和底部的条也会出现,即使在键盘closures后也会保留。 更糟糕的是,他们实际上隐藏了部分应用程序。 在这一点上,摆脱他们,并返回到全屏幕的唯一方法是退出应用程序,并重新启动它。 更新:我发现用户可以通过向下滑动并在状态栏上重新备份或点击最近的应用程序button来删除它们,但这并不明显。 有没有办法可以防止出现顶部和底部的酒吧? 理想情况下,我想避免更改platforms/android目录中的任何内容,因为我是移动开发新手。 也许有一个configuration选项,钩子,甚至插件,我可以放在这将解决这个问题?

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()/缩放小部件的问题 我是否错过了允许它们共存的一些重要的代码,或者我只需要select我可以不用的一个代码呢?

在android中显示webview的caching版本

我试图让networking的HTML5离线caching版本显示,当networking停在一个web视图。 我已经覆盖onReceivedError ok了,当networkingclosures时,这个方法被调用。 问题是它显示通用的“网页不可用”消息。 我怎样才能让它显示页面的HTML5caching版本? Web应用程序的离线存储是可以正常工作的,因为它在桌面版的Firefox和Chrome中运行良好。 我知道我可以在onReceivedError手动调用loadData到视图,但我不知道从哪里可以得到HTML5caching的值。 注意:如果我在loadData如view.loadData(Uri.encode("<html><div>Page load failed</div></html>"), "text/html", "UTF-8"); 然后点击返回(通过检测返回事件并调用webview.goBack();然后页面的caching版本显示正常。 以下是我添加到安装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);

向Phonegap Android splashscreen添加加载指示器/进度条

我有一个PhoneGap 1.4.1 / jQueryMobile 1.0.1 / Android项目,它显示res / drawable / splash.png就好了,一旦加载WebView,闪屏就会消失。 我想添加一些进度指标百分比文本到splashscreen,但到目前为止一直没有成功。 过去我使用普通的webview来取得成功,例如: myWebView.setWebViewClient(new WebViewClient() { @Override public void onPageFinished(WebView view, String url) { myLoadingView.setVisibility(View.GONE); myWebView.setVisibility(View.VISIBLE); } }); myWebView.loadUrl(…); 但所有这些只是一个布局,进度指示器文本和背景图片可以更新: myWebView.setWebChromeClient(new WebChromeClient() { public void onProgressChanged(WebView view, int progress) { myLoadingView.setText(progress+"%"); } }); 有谁知道我可以如何将这个function添加到现有的PhoneGap实现,或知道我可以用自己的实现来replacePhoneGap吗?