diff --git a/core/lib/utils/html/html_utils.dart b/core/lib/utils/html/html_utils.dart
index b156ed862..23e206ff2 100644
--- a/core/lib/utils/html/html_utils.dart
+++ b/core/lib/utils/html/html_utils.dart
@@ -554,4 +554,25 @@ class HtmlUtils {
.replaceAll('\n', '')
.replaceAll('\t', '');
}
+
+
+ /// Returns true if the browser is Safari and its major version is less than 17.
+ static bool isSafariBelow17() {
+ try {
+ final userAgent = html.window.navigator.userAgent;
+ log('HtmlUtils::isOldSafari:UserAgent = $userAgent');
+ final isSafari = userAgent.contains('Safari') && !userAgent.contains('Chrome');
+ if (!isSafari) return false;
+
+ final match = RegExp(r'Version/(\d+)\.').firstMatch(userAgent);
+ if (match == null) return false;
+
+ final version = int.tryParse(match.group(1)!);
+ log('HtmlUtils::isOldSafari:Version = $version');
+ return version != null && version < 17;
+ } catch (e) {
+ logError('HtmlUtils::isOldSafari:Exception = $e');
+ return false;
+ }
+ }
}
diff --git a/lib/main/utils/app_utils.dart b/lib/main/utils/app_utils.dart
index 2afe30ba9..771c43d3f 100644
--- a/lib/main/utils/app_utils.dart
+++ b/lib/main/utils/app_utils.dart
@@ -1,4 +1,5 @@
-import 'package:core/utils/app_logger.dart';
+import 'package:core/core.dart';
+import 'package:core/utils/html/html_utils.dart';
import 'package:date_format/date_format.dart' as date_format;
import 'package:flutter/material.dart';
import 'package:flutter/services.dart';
@@ -9,6 +10,7 @@ import 'package:tmail_ui_user/main/localizations/app_localizations.dart';
import 'package:tmail_ui_user/main/localizations/language_code_constants.dart';
import 'package:tmail_ui_user/main/utils/app_config.dart';
import 'package:url_launcher/url_launcher.dart';
+import 'package:tmail_ui_user/main/universal_import/html_stub.dart' as html;
class AppUtils {
const AppUtils._();
@@ -31,12 +33,16 @@ class AppUtils {
);
}
- static Future launchLink(String url, {bool isNewTab = true}) async {
- return await launchUrl(
- Uri.parse(url),
- webOnlyWindowName: isNewTab ? '_blank' : '_self',
- mode: LaunchMode.externalApplication
- );
+ static void launchLink(String url, {bool isNewTab = true}) {
+ if (PlatformInfo.isWeb && HtmlUtils.isSafariBelow17()) {
+ html.window.open(url, isNewTab ? '_blank' : '_self');
+ } else {
+ launchUrl(
+ Uri.parse(url),
+ webOnlyWindowName: isNewTab ? '_blank' : '_self',
+ mode: LaunchMode.externalApplication,
+ );
+ }
}
static bool isDirectionRTL(BuildContext context) {