我有这个应用程序,它在webview中读取文章。首次启动ArticleActivity时,网页的html实际上会下载到字符串中并进行解析以使其看起来像移动网站,然后我使用wb.loadData(html, "text/html; charset=UTF-8", null);
。下载发生在asynctask,因为我无法在ui线程上进行互联网活动,但是现在,只要点击页面上的链接,它就会根据webview客户端默认为loadUrl()
。我可以在历史中使用goBack()
,没问题。
问题在于搜索栏小部件。我调用SearchResultsActivity,它会打开一个webview并加载一个url。当用户点击文章时,SearchResultsActivity会通过intent将其发送回ArticleActivity。问题在于我想使用loadData()
作为新文章链接,我尝试在onResume()
中执行此操作,但如果我仍然在之前加载的页面上,则没有任何反应。日志语句显示来自EXTRA_RETURN_RESULT
的Url确实成功了,所以我认为意图很好。我认为这是由于javascript"相同的起源"事情,这就是为什么如果我使用loadDataWithBaseURL()
,页面加载。但是,如果我现在尝试后退按钮,之前加载的页面是空白的!加载新页面时,如何保存历史记录?
class SearchWebViewClient extends WebViewClient {
@Override
public boolean shouldOverrideUrlLoading(WebView view, String url) {
// if it is morning sign out AND is an article, send url to ArticleActivity
if(Uri.parse(url).getHost().endsWith("morningsignout.com")) {
Intent intent = new Intent(view.getContext(), ArticleActivity.class);
intent.putExtra(Intent.EXTRA_RETURN_RESULT, url); // Put url in intent
intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_SINGLE_TOP); // Open w/ old articleActivity if exists
view.getContext().startActivity(intent);
return true;
}
// Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse(url));
// view.getContext().startActivity(intent);
return false;
}
}
来自ArticleActivity的
@Override
protected void onResume() {
super.onResume();
// URL from CategoryActivity
String intentURL = getIntent().getStringExtra(Intent.EXTRA_HTML_TEXT);
// Set webView to new article
if (intentURL != null) new URLToMobileArticle(webView).execute(intentURL);
else {
// If statement is reached, then intent originated from SearchResultsActivity
intentURL = getIntent().getStringExtra(Intent.EXTRA_RETURN_RESULT);
new URLToMobileArticle(webView).execute(intentURL);
Log.d("ArticleActivity", "Loading: " + intentURL);
}
}
URLToMobileArticle
是什么,getArticles()
是下载/解析功能:
public URLToMobileArticle(WebView webview) {
this.wb = webview;
}
@Override
protected String doInBackground(String... params) {
return getArticle(params[0]);
}
@Override
protected void onPostExecute(final String html) {
wb.loadData(html, "text/html; charset=UTF-8", null);
// wb.loadDataWithBaseURL(link, html, "text/html; charset=UTF-8", null, null);
Log.d("URLToMobileArticle", "Loaded webpage");
}
答案 0 :(得分:0)
答案是我可以使用shouldInterceptRequest()来始终以我认为合适的方式加载html。我只需要确保我可以区分网页网址和其他请求,如图片或样式表