Однако в настольных версиях Chrome функция ˋresolveˋ записи каталога возвращает Promise с массивом компонентов пути к записи. https://developer.mozilla.org/en-US/doc ... le/resolve, под Android кажется, что функция всегда возвращает, независимо от уровня вложенности, только двухкомпонентный путь, начинающийся с ˋdocumentˋ, за которым следует строка, в которую включены каталоги, но разделенные символом ˋ%2ˋ, и префиксом, например. ˋprimary%3ADocuments%2Fˋ.
Эта разница между ˋresolveˋ Chrome для настольных компьютеров и ˋresolveˋ для Android обусловлена дизайном или особенностью/ошибкой первого выпуска?
Пример страницы, открывающей средство выбора каталога: https://martin-honnen.github.io/js/2025 ... Test1.html, если я открою каталог, например с именем ˋxslt-1.0ˋ в настольной версии Chrome я получаю некоторую иерархию, например
- xslt-1.0
< li>подпапка1 (подпапка1)
module-test2.xsl (подпапка1/модуль-test2.xsl)
< /li>
На Android я получаю плоские пути в форме, например:
- xslt- 1.0
подпапка1 (документ/основной%3ADocuments%2Fxslt-1.0%2Fподпапка1)
module-test2.xsl (документ/основной%3ADocuments%2Fxslt-1.0%2Fподпапка1%2Fмодуль -test2.xsl)
Я также включаю код как фрагмент кода, но поскольку JavaScript выполняется внутри iframe, использование средства выбора каталога не работает.
Код: Выделить всё
async function buildRootDirList(dirHandle) {
const ul = document.createElement('ul');
document.body.appendChild(ul);
const li = document.createElement('li');
ul.appendChild(li);
li.appendChild(document.createTextNode(dirHandle.name));
await buildDirList(dirHandle, dirHandle, li);
}
async function buildDirList(dirHandle, rootDirHandle, parentElement) {
const ul = document.createElement('ul');
parentElement.appendChild(ul);
for await (const entry of dirHandle.values()) {
const li = document.createElement('li');
ul.appendChild(li);
li.appendChild(document.createTextNode(`${entry.name} (${(await rootDirHandle.resolve(entry)).join('/')})`));
if (entry.kind === 'directory') {
await buildDirList(entry, rootDirHandle, li);
}
}
}
document.getElementById('dp1').addEventListener('click', async () => {
const dirHandle = await window.showDirectoryPicker();
await buildRootDirList(dirHandle);
}); Код: Выделить всё
Подробнее здесь: https://stackoverflow.com/questions/793 ... thod-of-di
Мобильная версия