从字符串加载 html 时 TWebBrowser 抛出线程异常
TWebBrowser throwing thread exception when loading html from string
我正在开发一个将 HTML 字符串加载到 WebBrowser 中的应用程序,但是当我从 WebBrowser 调用 LoadFromString 方法时,它会抛出一个 RuntimeException 消息:
java.lang.RuntimeException: java.lang.Throwable: A WebView method was called on thread 'Thread-2'. All WebView methods must be called on the same thread. (Expected Looper Looper (main, tid 2) {c7ba400} called on null, FYI main Looper is Looper (main, tid 2) {c7ba400})
HTML 存储在一个文件中并加载到一个字符串中只是出于测试原因,最终应用程序将从 DataSnap 获取字符串并使用 WebBrowser 显示它。
这是代码:
procedure LoadString;
var
htmlContent: String;
filePath: String;
dbpath: String;
begin
filePath := TPath.Combine(TPath.GetDocumentsPath, 'index.html');
htmlContent := TFile.ReadAllText(filePath);
WebBrowser1.LoadFromStrings(htmlContent, 'about:blank');
btnSearch.Visible := False;
TabControl1.GotoVisibleTab(tbResult.Index);
end;
我没有在此应用程序中使用线程。
如果相关,我正在使用 Delphi 10.1 Berlin 并在装有 Android 9 的 Moto G5 中进行测试。
WebBroser 方法需要 运行 在 UI 线程中,所以正如 Dalija Prasnikar 评论所说,我将调用移至 CallInUiThread,现在一切正常。
我正在开发一个将 HTML 字符串加载到 WebBrowser 中的应用程序,但是当我从 WebBrowser 调用 LoadFromString 方法时,它会抛出一个 RuntimeException 消息:
java.lang.RuntimeException: java.lang.Throwable: A WebView method was called on thread 'Thread-2'. All WebView methods must be called on the same thread. (Expected Looper Looper (main, tid 2) {c7ba400} called on null, FYI main Looper is Looper (main, tid 2) {c7ba400})
HTML 存储在一个文件中并加载到一个字符串中只是出于测试原因,最终应用程序将从 DataSnap 获取字符串并使用 WebBrowser 显示它。
这是代码:
procedure LoadString;
var
htmlContent: String;
filePath: String;
dbpath: String;
begin
filePath := TPath.Combine(TPath.GetDocumentsPath, 'index.html');
htmlContent := TFile.ReadAllText(filePath);
WebBrowser1.LoadFromStrings(htmlContent, 'about:blank');
btnSearch.Visible := False;
TabControl1.GotoVisibleTab(tbResult.Index);
end;
我没有在此应用程序中使用线程。
如果相关,我正在使用 Delphi 10.1 Berlin 并在装有 Android 9 的 Moto G5 中进行测试。
WebBroser 方法需要 运行 在 UI 线程中,所以正如 Dalija Prasnikar 评论所说,我将调用移至 CallInUiThread,现在一切正常。