Hi!

I run into a problem with 
QFileDialog::getOpenFileContent function, which are use to access to the 
local filesystem with emscripten:
https://doc.qt.io/qt-5/qfiledialog.html#getOpenFileContent

I tried to call it on a different thread then what on the wasm application 
is running:
std::thread th1 (QFileDialog::getOpenFileContent, "*.*", onFileReady);
th1.join();

But in that case, it froze at the emscripten part in the openFileDialog 
function and no file dialogue was opened.
emscripten::val document = emscripten::val::global("document");
emscripten::val input = document.call<emscripten::val>("createElement", 
std::string("input"));


*I got the error message at creating the input value.*
*https://codereview.qt-project.org/c/qt/qtbase/+/250461/7/src/gui/platform/wasm/qwasmlocalfileaccess.cpp#129*
 
<https://codereview.qt-project.org/c/qt/qtbase/+/250461/7/src/gui/platform/wasm/qwasmlocalfileaccess.cpp#129>

Running on the main thread there is no error and works fine. 
Any idea what could be the problem/solution here?
I got this error message:

worker.js onmessage() captured an uncaught exception: TypeError: Cannot 
read properties of undefined (reading 'createElement')
self.onmessage @ soffice.worker.js:207
soffice.worker.js:208 TypeError: Cannot read properties of undefined 
(reading 'createElement')
    at methodCaller_emscripten$$val_$std$$string$ (eval at new_ 
(47933e67-c694-46fe-af70-91dc8b50859c:8694:27), <anonymous>:5:20)
    at __emval_call_method (47933e67-c694-46fe-af70-91dc8b50859c:9267:14)
    at emscripten::internal::MethodCaller<emscripten::val, 
std::__2::basic_string<char, std::__2::char_traits<char>, 
std::__2::allocator<char> > >::call(emscripten::internal::_EM_VAL*, char 
const*, std::__2::basic_string<char, std::__2::char_traits<char>, 
std::__2::allocator<char> 
emscripten::internal::MethodCaller<emscripten::val, 
std::__2::basic_string<char, std::__2::char_traits<char>, 
std::__2::allocator<char> > >::call(emscripten::internal::_EM_VAL*, char 
const*, std::__2::basic_string<char, std::__2::char_traits<char>, 
std::__2::allocator<char> >&&) (val.h:278)
    at emscripten::val emscripten::val::call<emscripten::val, 
std::__2::basic_string<char, std::__2::char_traits<char>, 
std::__2::allocator<char> > >(char const*, std::__2::basic_string<char, 
std::__2::char_traits<char>, std::__2::allocator<char> >&&) emscripten::val 
emscripten::val::call<emscripten::val, std::__2::basic_string<char, 
std::__2::char_traits<char>, std::__2::allocator<char> > >(char const*, 
std::__2::basic_string<char, std::__2::char_traits<char>, 
std::__2::allocator<char> >&&) const (val.h:498)
    at QWasmLocalFileAccess::openFileDialog(std::__2::basic_string<char, 
std::__2::char_traits<char>, std::__2::allocator<char> > const&, 
QWasmLocalFileAccess::FileSelectMode, std::__2::function<void 
(qstdweb::FileList const&)> 
QWasmLocalFileAccess::openFileDialog(std::__2::basic_string<char, 
std::__2::char_traits<char>, std::__2::allocator<char> > const&, 
QWasmLocalFileAccess::FileSelectMode, std::__2::function<void 
(qstdweb::FileList const&)> const&) (qwasmlocalfileaccess.cpp:131)
    at QWasmLocalFileAccess::openFiles(std::__2::basic_string<char, 
std::__2::char_traits<char>, std::__2::allocator<char> > const&, 
QWasmLocalFileAccess::FileSelectMode, std::__2::function<void (int)> 
const&, std::__2::function<char* (unsigned long long, 
std::__2::basic_string<char, std::__2::char_traits<char>, 
std::__2::allocator<char> >)> const&, std::__2::function<void ()> 
QWasmLocalFileAccess::openFiles(std::__2::basic_string<char, 
std::__2::char_traits<char>, std::__2::allocator<char> > const&, 
QWasmLocalFileAccess::FileSelectMode, std::__2::function<void (int)> 
const&, std::__2::function<char* (unsigned long long, 
std::__2::basic_string<char, std::__2::char_traits<char>, 
std::__2::allocator<char> >)> const&, std::__2::function<void ()> const&) 
(qwasmlocalfileaccess.cpp:156)
    at QWasmLocalFileAccess::openFile(std::__2::basic_string<char, 
std::__2::char_traits<char>, std::__2::allocator<char> > const&, 
std::__2::function<void (bool)> const&, std::__2::function<char* (unsigned 
long long, std::__2::basic_string<char, std::__2::char_traits<char>, 
std::__2::allocator<char> >)> const&, std::__2::function<void ()> 
QWasmLocalFileAccess::openFile(std::__2::basic_string<char, 
std::__2::char_traits<char>, std::__2::allocator<char> > const&, 
std::__2::function<void (bool)> const&, std::__2::function<char* (unsigned 
long long, std::__2::basic_string<char, std::__2::char_traits<char>, 
std::__2::allocator<char> >)> const&, std::__2::function<void ()> const&) 
(qwasmlocalfileaccess.cpp:169)
    at QFileDialog::getOpenFileContent(QString const&, 
std::__2::function<void (QString const&, QByteArray const&)> 
QFileDialog::getOpenFileContent(QString const&, std::__2::function<void 
(QString const&, QByteArray const&)> const&)::$_2::operator()() 
(qfiledialog.cpp:2444)
    at decltype(std::__2::forward<QFileDialog::getOpenFileContent(QString 
const&, std::__2::function<void (QString const&, QByteArray const&)> 
const&)::$_2&>(fp)()) 
std::__2::__invoke<QFileDialog::getOpenFileContent(QString const&, 
std::__2::function<void (QString const&, QByteArray const&)> 
const&)::$_2&>(QFileDialog::getOpenFileContent(QString const&, 
std::__2::function<void (QString const&, QByteArray const&)> 
decltype(std::__2::forward<QFileDialog::getOpenFileContent(QString const&, 
std::__2::function<void (QString const&, QByteArray const&)> 
const&)::$_2&>(fp)()) 
std::__2::__invoke<QFileDialog::getOpenFileContent(QString const&, 
std::__2::function<void (QString const&, QByteArray const&)> 
const&)::$_2&>(QFileDialog::getOpenFileContent(QString const&, 
std::__2::function<void (QString const&, QByteArray const&)> const&)::$_2&) 
(type_traits:3694)
    at void std::__2::__invoke_void_return_wrapper<void, 
true>::__call<QFileDialog::getOpenFileContent(QString const&, 
std::__2::function<void (QString const&, QByteArray const&)> 
const&)::$_2&>(QFileDialog::getOpenFileContent(QString const&, 
std::__2::function<void (QString const&, QByteArray const&)> void 
std::__2::__invoke_void_return_wrapper<void, 
true>::__call<QFileDialog::getOpenFileContent(QString const&, 
std::__2::function<void (QString const&, QByteArray const&)> 
const&)::$_2&>(QFileDialog::getOpenFileContent(QString const&, 
std::__2::function<void (QString const&, QByteArray const&)> const&)::$_2&) 
(__functional_base:348)worker.js onmessage() captured an uncaught 
exception: TypeError: Cannot read properties of undefined (reading 
'createElement')
self.onmessage @ soffice.worker.js:207
soffice.worker.js:208 TypeError: Cannot read properties of undefined 
(reading 'createElement')
    at methodCaller_emscripten$$val_$std$$string$ (eval at new_ 
(47933e67-c694-46fe-af70-91dc8b50859c:8694:27), <anonymous>:5:20)
    at __emval_call_method (47933e67-c694-46fe-af70-91dc8b50859c:9267:14)
    at emscripten::internal::MethodCaller<emscripten::val, 
std::__2::basic_string<char, std::__2::char_traits<char>, 
std::__2::allocator<char> > >::call(emscripten::internal::_EM_VAL*, char 
const*, std::__2::basic_string<char, std::__2::char_traits<char>, 
std::__2::allocator<char> 
emscripten::internal::MethodCaller<emscripten::val, 
std::__2::basic_string<char, std::__2::char_traits<char>, 
std::__2::allocator<char> > >::call(emscripten::internal::_EM_VAL*, char 
const*, std::__2::basic_string<char, std::__2::char_traits<char>, 
std::__2::allocator<char> >&&) (val.h:278)
    at emscripten::val emscripten::val::call<emscripten::val, 
std::__2::basic_string<char, std::__2::char_traits<char>, 
std::__2::allocator<char> > >(char const*, std::__2::basic_string<char, 
std::__2::char_traits<char>, std::__2::allocator<char> >&&) emscripten::val 
emscripten::val::call<emscripten::val, std::__2::basic_string<char, 
std::__2::char_traits<char>, std::__2::allocator<char> > >(char const*, 
std::__2::basic_string<char, std::__2::char_traits<char>, 
std::__2::allocator<char> >&&) const (val.h:498)
    at QWasmLocalFileAccess::openFileDialog(std::__2::basic_string<char, 
std::__2::char_traits<char>, std::__2::allocator<char> > const&, 
QWasmLocalFileAccess::FileSelectMode, std::__2::function<void 
(qstdweb::FileList const&)> 
QWasmLocalFileAccess::openFileDialog(std::__2::basic_string<char, 
std::__2::char_traits<char>, std::__2::allocator<char> > const&, 
QWasmLocalFileAccess::FileSelectMode, std::__2::function<void 
(qstdweb::FileList const&)> const&) (qwasmlocalfileaccess.cpp:131)
    at QWasmLocalFileAccess::openFiles(std::__2::basic_string<char, 
std::__2::char_traits<char>, std::__2::allocator<char> > const&, 
QWasmLocalFileAccess::FileSelectMode, std::__2::function<void (int)> 
const&, std::__2::function<char* (unsigned long long, 
std::__2::basic_string<char, std::__2::char_traits<char>, 
std::__2::allocator<char> >)> const&, std::__2::function<void ()> 
QWasmLocalFileAccess::openFiles(std::__2::basic_string<char, 
std::__2::char_traits<char>, std::__2::allocator<char> > const&, 
QWasmLocalFileAccess::FileSelectMode, std::__2::function<void (int)> 
const&, std::__2::function<char* (unsigned long long, 
std::__2::basic_string<char, std::__2::char_traits<char>, 
std::__2::allocator<char> >)> const&, std::__2::function<void ()> const&) 
(qwasmlocalfileaccess.cpp:156)
    at QWasmLocalFileAccess::openFile(std::__2::basic_string<char, 
std::__2::char_traits<char>, std::__2::allocator<char> > const&, 
std::__2::function<void (bool)> const&, std::__2::function<char* (unsigned 
long long, std::__2::basic_string<char, std::__2::char_traits<char>, 
std::__2::allocator<char> >)> const&, std::__2::function<void ()> 
QWasmLocalFileAccess::openFile(std::__2::basic_string<char, 
std::__2::char_traits<char>, std::__2::allocator<char> > const&, 
std::__2::function<void (bool)> const&, std::__2::function<char* (unsigned 
long long, std::__2::basic_string<char, std::__2::char_traits<char>, 
std::__2::allocator<char> >)> const&, std::__2::function<void ()> const&) 
(qwasmlocalfileaccess.cpp:169)
    at QFileDialog::getOpenFileContent(QString const&, 
std::__2::function<void (QString const&, QByteArray const&)> 
QFileDialog::getOpenFileContent(QString const&, std::__2::function<void 
(QString const&, QByteArray const&)> const&)::$_2::operator()() 
(qfiledialog.cpp:2444)
    at decltype(std::__2::forward<QFileDialog::getOpenFileContent(QString 
const&, std::__2::function<void (QString const&, QByteArray const&)> 
const&)::$_2&>(fp)()) 
std::__2::__invoke<QFileDialog::getOpenFileContent(QString const&, 
std::__2::function<void (QString const&, QByteArray const&)> 
const&)::$_2&>(QFileDialog::getOpenFileContent(QString const&, 
std::__2::function<void (QString const&, QByteArray const&)> 
decltype(std::__2::forward<QFileDialog::getOpenFileContent(QString const&, 
std::__2::function<void (QString const&, QByteArray const&)> 
const&)::$_2&>(fp)()) 
std::__2::__invoke<QFileDialog::getOpenFileContent(QString const&, 
std::__2::function<void (QString const&, QByteArray const&)> 
const&)::$_2&>(QFileDialog::getOpenFileContent(QString const&, 
std::__2::function<void (QString const&, QByteArray const&)> const&)::$_2&) 
(type_traits:3694)
    at void std::__2::__invoke_void_return_wrapper<void, 
true>::__call<QFileDialog::getOpenFileContent(QString const&, 
std::__2::function<void (QString const&, QByteArray const&)> 
const&)::$_2&>(QFileDialog::getOpenFileContent(QString const&, 
std::__2::function<void (QString const&, QByteArray const&)> void 
std::__2::__invoke_void_return_wrapper<void, 
true>::__call<QFileDialog::getOpenFileContent(QString const&, 
std::__2::function<void (QString const&, QByteArray const&)> 
const&)::$_2&>(QFileDialog::getOpenFileContent(QString const&, 
std::__2::function<void (QString const&, QByteArray const&)> const&)::$_2&) 
(__functional_base:348)

Thanks in advance,
Balazs

-- 
You received this message because you are subscribed to the Google Groups 
"emscripten-discuss" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to emscripten-discuss+unsubscr...@googlegroups.com.
To view this discussion on the web visit 
https://groups.google.com/d/msgid/emscripten-discuss/0b5c70fa-8cd2-4705-a64c-4816c1189dccn%40googlegroups.com.

Reply via email to