diff --git a/b0esche_cloud/lib/pages/document_viewer.dart b/b0esche_cloud/lib/pages/document_viewer.dart index 8360b7a..ca877aa 100644 --- a/b0esche_cloud/lib/pages/document_viewer.dart +++ b/b0esche_cloud/lib/pages/document_viewer.dart @@ -403,17 +403,8 @@ class _DocumentViewerModalState extends State { final wopiSession = snapshot.data!; - // Build Collabora Online viewer URL with WOPISrc - // The WOPISrc must be URL-encoded and kept encoded - // We use a double-encoding approach: encodeComponent keeps it encoded through iframe.src - final baseUrl = - 'https://of.b0esche.cloud/loleaflet/dist/loleaflet.html'; - final collaboraUrl = Uri.parse( - baseUrl, - ).replace(queryParameters: {'WOPISrc': wopiSession.wopisrc}).toString(); - - // Use WebView to display Collabora Online - return _buildWebView(collaboraUrl); + // Don't build URL with query parameters - pass WOPISrc separately to JavaScript + return _buildWebView(wopiSession.wopisrc); }, ); } @@ -457,16 +448,12 @@ class _DocumentViewerModalState extends State { } } - Widget _buildCollaboraIframe(String collaboraUrl) { + Widget _buildCollaboraIframe(String wopisrc) { // For Collabora Online, we need to POST the WOPISrc, not GET it // Use JavaScript to create and submit the form properly final String viewType = 'collabora-form-${DateTime.now().millisecondsSinceEpoch}'; ui.platformViewRegistry.registerViewFactory(viewType, (int viewId) { - // Extract the WOPISrc from the URL - final uri = Uri.parse(collaboraUrl); - final wopisrc = uri.queryParameters['WOPISrc'] ?? ''; - // Create a container for the form and iframe final container = html.DivElement() ..style.width = '100%' @@ -531,9 +518,9 @@ class _DocumentViewerModalState extends State { return HtmlElementView(viewType: viewType); } - Widget _buildWebView(String url) { + Widget _buildWebView(String wopisrc) { // Embed Collabora Online in an iframe for web platform - return _buildCollaboraIframe(url); + return _buildCollaboraIframe(wopisrc); } @override