我不知道我是否誤解了jQueryMobile,或者我看到Chromium Webview錯誤。我有一個使用webview顯示jQueryMobile內容的Android應用程序。當用戶在頁面的DIV內導航時,在onPageFinished()中,我調用getTitle()來檢索Html頁面標題。有時,getTitle()返回頁面的URL而不是頁面標題。Android 4.4.4 onPageFinished()中的WebView getTitle()返回頁面URL?
我不明白爲什麼。
下面是Android活動的簡化版本,表明了同樣的問題:
public class WebViewTitleTestActivity extends Activity {
private WebView mWebView;
private TextView mTitleTextView;
private final String TAG = "WebViewTitleTest";
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
mWebView = (WebView) findViewById(R.id.webView);
mTitleTextView = (TextView) findViewById(R.id.title);
mWebView.setWebViewClient(new WebViewClient() {
@Override
public void onPageFinished(WebView view, String url) {
String titleText = view.getTitle();
Log.i(TAG, String.format("in onPageFinished. titleText = %s", titleText));
mTitleTextView.setText(String.format("Title: %s", titleText));
}
});
final WebSettings browserSettings = mWebView.getSettings();
browserSettings.setJavaScriptEnabled(true);
mWebView.loadUrl("file:///android_asset/jqmTest.html");
}
}
下面是一些示例HTML:
<html lang="en" class="ui-mobile">
<head>
<title>Send a message</title>
<link rel="stylesheet" href="http://code.jquery.com/mobile/1.4.5/jquery.mobile-1.4.5.min.css"/>
<script src="http://code.jquery.com/jquery-1.11.1.min.js"></script>
<script src="http://code.jquery.com/mobile/1.4.5/jquery.mobile-1.4.5.min.js"></script>
</head>
<div history="false" data-role="page" data-cache="false" id="signal" data-url="signal" tabindex="0"
class="ui-page ui-body-c ui-page-active" style="min-height: 486px;">
<div data-role="content" class="content ui-content" role="main">
<h2>Send a message <a href="#help" class="information ui-link" id="signalInfoBox">(help)</a></h2>
<div class="text">
<p>We'll send a message to your destination.</p>
</div>
</div>
<div id="divAction" class="response">
<div class="buttons">
<div class="yes-single">
<a href="#" id="sendsignal" data-role="button" data-theme="c"
class="ui-btn ui-btn-up-c ui-btn-corner-all ui-shadow">
<span class="ui-btn-inner ui-btn-corner-all"><span class="ui-btn-text">Send</span></span></a>
</div>
</div>
</div>
</div>
<div data-role="page" class="ui-page ui-body-a ui-body-c" id="help" data-url="help" data-external-page="false"
tabindex="0" style="min-height: 526px;">
<div data-role="content" class="content ui-content" role="main">
<h2>More Info</h2>
<div class="text">
<p>You can send a message to your selected destination. Just click Send.</p>
</div>
</div>
<div class="response">
<div class="buttons">
<a id="btnCancel" href="#signal"
class="cancel-button ui-btn ui-btn-corner-all ui-shadow ui-btn-up-c ui-btn-up-undefined"
style="padding: 10px 0;" data-role="button">Close</a>
</div>
</div>
</div>
</html>
當用戶點擊(幫助)鏈接,導航到#help,顯示幫助div,getTitle()檢索的標題是正確的。當用戶點擊關閉按鈕時,在onPageFinished()中,對view.getTitle()的調用將返回頁面URL而不是Html標題。
爲什麼veiw.getTitle()返回頁面url?
我在運行Android 4.4.4的摩托羅拉Moto E上測試這個。目標SDK是API 19.這似乎不會在Android 4.4.2或5.x上發生。這是4.4.4的一個已知問題嗎?
第一次加載頁面時先生getTitle()是否正確? – Elltz
是的,第一次加載頁面(並顯示id =「signal」div)標題是正確的。點擊(幫助)鏈接,標題仍然正確。然後點擊關閉,然後標題是錯誤的。此外,似乎onPageFinished()被稱爲每次頁面加載兩次。這是jQueryMobile的副作用嗎? –
老實說,我不能告訴,但從webview文檔說getTitle是頁面的標題,直到onTitleReceived被調用,所以即時猜你拉標題一次,並保存在某處,因爲它不是之後,該接口被稱爲,老實說,這些都是猜測, – Elltz