QML Webview を使用しています。intel.com、apple.com、cnn.com、foxnews.com などのサイトでは問題なく動作するようですが、gmail.com や hotmail.com を読み込もうとすると、次の html しか読み込まれないようです。
<html><head></head><body></body></html>
==== load finished
これは、onLoadFinished イベントにあるデバッグ メッセージによってダンプされます。
Webview をセットアップする方法は次のとおりです。
WebView {
id: webView
focus: true
preferredWidth: webkit.width
preferredHeight: webkit.height
settings.autoLoadImages: true
settings.javascriptEnabled: true
settings.javascriptCanOpenWindows: true
settings.minimumFontSize: 12
settings.defaultFontSize: webkit.fontsize
url: ""
onLoadFinished: {
console.debug(webView.html);
console.debug("==== load finished");
}
}
(他のイベントは表示されません)
私が間違っているかもしれないことを知っている人はいますか?「設定」に関するドキュメントがほとんどないため、設定が不足している場合はわかりません(明らかでない限り)。4.7.1 を使用していますが、4.8.2 を試しても同じ結果が得られました。
ありがとう
[編集] 同僚は、それがユーザー エージェントの問題である可能性があると示唆しました。QWebView の C++ バージョンの変更に関する多くの記事を見てきましたが、Qt ソースを直接ハッキングしない限り、QML 側からどのように変更できるかわかりません。それが問題だと思う人はいますか?gmail.com は私のデスクトップ上の他の Web ブラウザー (ubuntu 11.10) で問題なく動作するため、私はそれを疑います。
[編集] Qt 4.7.1 で「ブラウザ」の例をコンパイルしましたが、そこでも動作しません。Qt は先日 4.8.3 でリリースされ、そこで 'browser' をコンパイルしたところ、(browser) は機能しました。gmail.com が http: から https: に変更されていることに気付いたので、QT を -no-openssl でコンパイルしていたことが原因ではないかと考えました。QMLの問題がうまくいかず、4.7.1と4.8.3をopensslでコンパイルしようとしました。
[半解決済み] QT ドキュメントが貧弱であることが判明しました (初心者向け)。QML Webview のドキュメントには、独自の NetworkAccessManagerFactory をインストールする必要があるとは書かれていません。DeclarativeView には engine() (少なくとも 4.7.1) があり、独自の Factory で setNetworkAccessManagerFactory() を呼び出します。これで、デスクトップでは動作しますが、組み込み Linux デバイスでは動作しません。gmail.com のダウンロードを 10% で「ロック」することはありませんが、現在は失敗しています。また、openssl を使用して Qt をコンパイルする必要がありましたが、openssl ライブラリ (ssl および crypto) をロードしていますが、組み込みデバイスではまだ動作していません。非常に奇妙な。
[解決しよう] 変ですが、QNetworkAccessManager::sslErrors(QNetworkReply *, QList)) シグナルを実装していないようです。これはデスクトップには影響しませんでしたが、組み込みデバイスに行ったときは機能しませんでしたが、今では機能します。