我正在加载网址到webview:
WebView webview=(WebView)findViewById(R.id.webview);
webview.loadUrl(url);
Run Code Online (Sandbox Code Playgroud)
加载网址需要一些时间,在此期间显示空白屏幕.我想在加载网址时显示进度对话框:
ProgressDialog dialog = ProgressDialog.show(this, "HI","Loading......", true);
Run Code Online (Sandbox Code Playgroud)
但是,上面的代码是行不通的.如果有任何想法,请帮助.提前致谢.
我正在尝试在我的WebView中加载一些包含JavaScript的HTML代码.
现在,我想测试我的WebView是否在5秒之前加载.我已经尝试过这种方法getProgress(),但有时我得到的结果是100,但我的Webview没有加载.
有没有其他方法可以确保我的Webview 100%加载?
这是我的代码的一部分:
sdk.getWebView().loadDataWithBaseURL("notreal/", data_html,MIME_TYPE,ENCODING_UTF_8,null);
Timer timer = new Timer();
TimerTask task = new TimerTask() {
@Override
public void run(){
Log.i("TAG", "progress fin = "+sdk.getWebView().getProgress());
if(sdk.getWebView().getProgress() <100){
//cancel the webView
sdk.getContext().runOnUiThread(new Runnable() {
@Override
public void run() {
sdk.getImgView().setVisibility(View.VISIBLE);
sdk.getWebView().setVisibility(View.GONE);
}
});
}
// else ,the Webview is loaded
else{
//prepare webview
sdk.getContext().runOnUiThread(new Runnable() {
@Override
public void run(){
// hide imageView
sdk.getImgView().setVisibility(View.GONE);
sdk.getWebView().setVisibility(View.VISIBLE);
}
});
}
}
};
timer.schedule(task, 5000);
Run Code Online (Sandbox Code Playgroud) 我想知道如何确定何时完成 WebView 加载.
让我完全定义.
这个问题的答案很糟糕:
WebViewClient.onPageFinished() - 如果有重定向加载页面,则会多次触发.它也会在页面显示之前触发.
PictureListener.onNewPicture() - 每次屏幕更改时都会触发,每次重定向都会触发AFAICT.我怎么知道哪个射击是最后一个?
WebChromeClient.onProgressChanged() - 与onPageFinished相同的问题.(在David建议以下解决方案后添加)
Thread.sleep(5000) - 应该很明显,为什么这是不可接受的.
当然,上述工作的巧妙组合将是完美的.
为什么我想知道你问这个?因为我想注入一些JavaScript 一次一次Webview是完全完成加载.
-Edit:找到解决方案
- 在经过一番繁重的搜索后想出来 - 一个人(我的意思是一个人)说他们改为使用onPageLoad(); 这完全符合我的目的.区别在于onPageLoad()的运行时间晚于shouldOverrideUrlLoading,但它对我的代码没有影响.
我正在尝试使用OAuth为Android应用程序设置Twitter授权,到目前为止我可以成功将用户发送到授权URL,但是,我现在要做的是拦截重定向到回调(这只是导致404错误,我们的回调URL不会在我们的服务器上有关联的页面).我要做的是检查URL是否是我们的回调,然后从URL中提取OAuth Verifier.我使用以下代码设置我的WebView:
view = (WebView)findViewById(R.id.twitterWbVw);
view.setWebViewClient(new WebViewClient(){
@Override
public boolean shouldOverrideUrlLoading(WebView wView, String url)
{
String urlHolder;
String[] verifExtrctr;
urlHolder = url.substring(0, url.indexOf('?'));
System.out.println("url");
if(urlHolder.equalsIgnoreCase(CALLBACK_URL))
{
verifExtrctr = urlHolder.split("?");
verifExtrctr = verifExtrctr[2].split("=");
if(verifExtrctr[0].equalsIgnoreCase("oauth_verifier"))
{
params[5] = verifExtrctr[1];
return true;
}
else
{
System.out.println("Inocorrect callback URL format.");
}
}
else
{
wView.loadUrl(url);
}
return true;
}
});
view.loadUrl(urlAuthorize.toExternalForm());
Run Code Online (Sandbox Code Playgroud)
事情甚至是System.out.println("url"); (我用来调试)不运行!所以我的想法非常枯燥,找不到有类似问题的人.授权URL运行良好,我可以成功授权应用程序,但由于某种原因重定向到回调URL永远不会被截获.任何帮助将不胜感激,这是在我的onResume(),如果这很重要.
有没有办法在WebView中设置超时值?如果网址响应太慢,我希望WebView有时间.
这是一个直观的问题而不是直接问题,但是当我的应用程序中加载WebView时,屏幕为空白白色,持续2-4秒,直到内容完全加载.时间取决于正在加载的内容的大小.
有没有办法管理这个,所以屏幕只会在加载时刷新内容?像"加载......"动画或类似的东西?我只是不希望向我的用户呈现纯白屏幕.
我有一个启动画面,然后加载WebView.在初始空白暂停(加载时)之后,WebView工作正常,但我想将其保存在特定屏幕上,直到页面加载或具有带进度加载程序的黑屏.
是否有可能检测到负载完成的东西?如果是这种情况,我可以将其用作触发器.
有谁知道管理这个空白屏幕的方法?
谢谢!
/ R
在一个子类中WebView,我曾经在一个重写方法中使用此行getTitle():
String title = super.getTitle();
Run Code Online (Sandbox Code Playgroud)
它在Android的所有版本中运行良好,直到我在Android 4.1手机上测试我的应用程序,这给了我这条警告super.getTitle():
12-20 21:38:27.467:W/webview_proxy(2537):java.lang.Throwable中:警告:网页视图方法被称为上螺纹'WebViewCoreThread'. 必须在UI线程上调用所有WebView方法.WebView的未来版本可能不支持在其他线程上使用.
所以,我正在考虑通过runOnUiThread()以下方式解决这个新法令:
Activity a = this.getActivity();
a.runOnUiThread(new Runnable() {
public void run() {
String title = super.getTitle();
}
});
Run Code Online (Sandbox Code Playgroud)
但是这段代码甚至不会编译因为super不再引用WebView,而是指代Activity.
任何想法如何super.getTitle()从UI线程?(使用上面描述的约束,在getTitle()子类中WebView)
我正在尝试使用swift在xcode中创建一个webapp,这是我当前的代码:
IBOutlet var webView: UIWebView!
var theBool: Bool = false
var myTimer = NSTimer()
@IBOutlet var progressBar: UIProgressView!
override func viewDidLoad() {
super.viewDidLoad()
let url = NSURL(string: "http://stackoverflow.com")
let request = NSURLRequest(URL: url)
webView.loadRequest(request)
}
Run Code Online (Sandbox Code Playgroud)
我有一个问题,我如何在webView中确定页面的完成加载?
您是否知道包含WebView所有定义的文档?我的意思是..(开始/结束加载,当前网址,标题页等)?
(对不起我的英语不好).
我想记录历史记录网址或上次加载的网址,而无需手动存储历史记录网址.那可能吗?
我只是想知道何时加载html页面.在加载整个页面之前调用OnPageFinished.当我通过WebView创建的位图设置图像视图时,我得到了空白视图
mWebView.getSettings().setJavaScriptEnabled(true);
mWebView.setAlwaysDrawnWithCacheEnabled(true);
mWebView.setWebViewClient(new WebViewClient(){
@Override
public void onPageStarted(WebView view, String url, Bitmap favicon){
super.onPageStarted(view, url, favicon);
}
@Override
public void onPageFinished(WebView view,String url){
Bitmap b = Bitmap.createBitmap( 480, 240, Bitmap.Config.ARGB_8888);
Canvas c = new Canvas(b);
view.layout(view.getLeft(), view.getTop(), view.getRight(), view.getBottom());
view.draw(c);
mImageView.setImageBitmap(b);
//b.recycle();
}
});
Run Code Online (Sandbox Code Playgroud)
编辑:
我现在只尝试使用Toast消息来实现JavaScriptInterface,但它仍然不起作用.我已经粘贴了HTML代码和Java:
编辑:
我终于搞定了.我正确地使用了JavaScriptInterface.当loadUrl启动时,正在加载html文件.当整个页面在屏幕上可用时,来自html文件的onload函数从JavaScriptInterface类调用captureImage函数.现在我确定页面已满载,我可以抓住它的图片.谢谢你的帮助.
码:
JAVA:
mWebView.getSettings().setJavaScriptEnabled(true);
mWebView.setDrawingCacheEnabled(true);
mWebView.addJavascriptInterface(new JavaScriptInterface(this), "Android");
mWebView.setWebViewClient(new WebViewClient(){});
mButton.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
mWebView.loadUrl("file:///android_asset/html_sample.html");
//mWebView.loadUrl("https://www.onet.pl");
}
});
public class JavaScriptInterface {
private Context mContext;;
public JavaScriptInterface(Context …Run Code Online (Sandbox Code Playgroud) 我在Android 2.2上,我正在创建一个WebView内部对话框:
@Override
protected Dialog onCreateDialog(int id) {
Dialog dialog = new Dialog(this);
//.....
dialog.setContentView(R.layout.dialoghelp);
WebView v = (WebView)dialog.findViewById(R.id.helpWebView);
v.loadUrl("file:///android_asset/help.html");
//......
return dialog;
}
Run Code Online (Sandbox Code Playgroud)
它正在工作,但是第一次打开对话框WebView时,即使内容实际已加载,也没有布局.
我知道这一点,因为使用HierarchyViewer我可以看到内容并强制布局请求,我也可以在模拟器中看到它们.此外,如果我只是取消对话框并重新打开它,一切正常.
谁错了,Android还是我?我尝试加载,onPrepareDialog()但它是一样的.
编辑
我改变WebView的布局PARAMS来自fill_parent于wrap_content这种方式,它的工作原理.我可以看到它打开0高度,然后加载后它长大.宽度甚至在以前工作.
我有一个应用程序,它显示启动页面并在 WebView 中加载 URL 时删除该启动页面。以下是我们用来移除启动页面的相关代码:
browser.setWebViewClient(new BrowserClient() {
@Override
public void onPageFinished(WebView view, String url) {
super.onPageFinished(view, url);
// Work around for WebView onPageFinished called twice
if (flag == true) {
browser.setVisibility(View.VISIBLE);
splashImage.setVisibility(View.INVISIBLE);
pageLoader.setVisibility(View.INVISIBLE);
} else {
flag = true;
}
}
});
Run Code Online (Sandbox Code Playgroud)
这段代码有效......除了它很慢。在网页加载很久之后,启动页面需要很长时间才能删除。
是否有任何关于如何可靠地检测 WebView 何时加载页面的提示?过去几天我一直在研究这个,我似乎无法想出任何可靠的东西。
我看到的最有希望的是以下内容,但将此代码放在 Android 控制台中会引发错误:
@Override
public void invalidate() {
super.invalidate();
if (getContentHeight() > 0) {
// WebView has displayed some content and is scrollable.
}
}
Run Code Online (Sandbox Code Playgroud)
谢谢!
编辑:有很多答案提出 onPageFinished,甚至有人将其标记为重复,并带有指向使用 onPageFinished 的解决方案的链接。伙计们,我们已经在使用 onPageFinished …