Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion _articles/extended-usage/ocr.md
Original file line number Diff line number Diff line change
Expand Up @@ -42,7 +42,7 @@ It will copy an `ocr` folder to Dynamic Web TWAIN Service's [installation folder

### Step Two - Write a Basic Document Scanning Page

Create a HTML file with the following content. It can scan documents from scanners as well as loading local images.
Create an HTML file with the following content. It can scan documents from scanners as well as loading local images.

```html
<!DOCTYPE html>
Expand Down
1 change: 1 addition & 0 deletions _articles/faq/index.md
Original file line number Diff line number Diff line change
Expand Up @@ -209,6 +209,7 @@ description: Dynamic Web TWAIN SDK Documentation FAQ
32. [Why am I unable to load the TIFF file into Dynamic Web TWAIN?](/_articles/faq/unable-to-load-4-bit-tiff.md)
33. [Error message - CORS Errors caused by local network access permissions when using Chromium 142 and later](/_articles/faq/chromium-142-local-network-access-issue.md)
34. [Error message - File is Damaged and Can’t Be Opened in macOS](/_articles/faq/file-damaged-on-macos.md)
35. [Safari 26.2 Regression Causing Dynamic Web TWAIN v19.3 Auto-Reconnect Failure on macOS](/_articles/faq/safari-26-2-regression.md)

## Licensing and Purchase

Expand Down
37 changes: 37 additions & 0 deletions _articles/faq/safari-26-2-regression.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,37 @@
---
layout: default-layout
noTitleIndex: true
needAutoGenerateSidebar: true
title: Safari 26.2 Regression Causing Dynamic Web TWAIN v19.3 Auto-Reconnect Failure on macOS
keywords: Dynamic Web TWAIN, macos, Auto-Reconnect, 19.3, Safari
breadcrumbText: Safari 26.2 Regression Causing Dynamic Web TWAIN v19.3 Auto-Reconnect Failure on macOS
description: Safari 26.2 Regression Causing Dynamic Web TWAIN v19.3 Auto-Reconnect Failure on macOS
date: 2025-12-31 13:18:47 +0800
last_modified: 2025-12-31 13:18:47 +0800
---

# Safari 26.2 Regression Causing Dynamic Web TWAIN v19.3 Auto-Reconnect Failure on macOS

### Symptom

After upgrading to Safari 26.2 on macOS, a compatibility issue was observed with Dynamic Web TWAIN v19.3.

When a site installs or updates the Dynamic Web TWAIN v19.3 Service for the first time, the automatic connection and reconnect mechanism fails. A browser refresh is required to restore normal behavior.

### Issue characteristics

- Only occurs in Safari 26.2
- Does not occur in Safari 26.1 or earlier versions
- Does not occur in Dynamic Web TWAIN versions prior to 19.3

### Reason

Dynamic Web TWAIN 19.3 introduced a new configuration in reconnect requests: `targetAddressSpace: "loopback"`, following the Chrome Local Network Access documentation to explicitly indicate that the request targets the loopback address (127.0.0.1).

In Safari 26.1 and earlier, this configuration is ignored and requests are sent normally.

In Safari 26.2, `fetch` throws a `TypeError` when this configuration is present, causing the request to fail before being sent. As a result, `reconnect` cannot be implemented even though the Dynamsoft Service is installed and running.

### Update

The WebKit team has identified this issue as a regression in Safari 26.2 and has already fixed it. The fix will be included in an upcoming Safari release.
16 changes: 6 additions & 10 deletions _articles/info/api/restful.md
Original file line number Diff line number Diff line change
Expand Up @@ -1519,23 +1519,19 @@ const url = new URL("https://127.0.0.1:18623/api");
const documentuid = `190807444d76`;
const pathSegments = ['storage', 'documents', documentuid];
url.pathname = `${url.pathname}/${pathSegments.join('/')}`;

url.searchParams.set('pages', '190817548d70,190817648270');
url.searchParams.set('password', 'myFilePassword');
url.searchParams.set('quality', '50');

let myHeaders = new Headers();
myHeaders.append("DWT-DOC-PASSWORD", "myPassword");

let raw = JSON.stringify({
pages: '190817548d70,190817648270',
password: 'myFilePassword',
quality: 50
});


let requestOptions = {
method: 'GET',
headers: myHeaders,
body: raw,
redirect: 'follow'
};

fetch(url, requestOptions)
.then(response => response.text())
.then(result => console.log(result))
Expand Down
6 changes: 5 additions & 1 deletion _articles/info/schedule/Stable.md
Original file line number Diff line number Diff line change
Expand Up @@ -137,6 +137,10 @@ Updated the names of headers for the REST API.
- Fixed a CORS request blocked error which also triggers a prompt to install the Dynamic Web TWAIN Service.
- Fixed Vite runtime errors caused by polyfills and resource path misconfiguration.

## 18.5.3 (01/14/2026)

Updated third-party libraries to enhance security.

## 18.5.1 (10/22/2024)

### Improvements
Expand Down Expand Up @@ -1852,4 +1856,4 @@ In v10.0.1 there is no limit to the size of an Http Request. In v10.0, the WebSo

* TWAIN specification 1.9 compatible.
* Supports Native image transfer mode.
* Supports uploading and downloading image trough FTP.
* Supports uploading and downloading image through FTP.
17 changes: 17 additions & 0 deletions api.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
---
layout: null
sitemap: false
---
{
"articles": [
{% assign filtered_articles = site.articles | where_exp: "article", "article.url contains '/info/api/'" %}
{% for article in filtered_articles %}
{
"title": {{ article.title | jsonify }},
"url": "https://www.dynamsoft.com{{ article.url | relative_url }}",
"content": {{ article.content | strip_html | jsonify }},
"breadcrumb": {{ article.breadcrumbText | default: article.title | jsonify }}
}{% unless forloop.last %},{% endunless %}
{% endfor %}
]
}
16 changes: 16 additions & 0 deletions articles.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
---
layout: null
sitemap: false
---
{
"articles": [
{% for article in site.articles %}
{
"title": {{ article.title | jsonify }},
"url": "https://www.dynamsoft.com{{ article.url | relative_url }}",
"content": {{ article.content | strip_html | jsonify }},
"breadcrumb": {{ article.breadcrumbText | default: article.title | jsonify }}
}{% unless forloop.last %},{% endunless %}
{% endfor %}
]
}