Версия для печати
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум на Исходниках.RU > JavaScript, DOM/DHTML > JS, окно диалога - выбор файла


Автор: cupoma58 16.07.24, 17:58
Привет.
Есть плеер
<{CODE_COLLAPSE_OFF}><{CODE_WRAP_OFF}>
    <video src="" id="player" class="player"></video>

Загружаем, в плеер, файл - через окно выбора
<{CODE_COLLAPSE_OFF}><{CODE_WRAP_OFF}>
    baton.addEventListener('click', async ()=>{
      if (window.isSecureContext){
        try {var [fileHandle] = await window.showOpenFilePicker();}
        catch (error){'<font color="red">Упс, бро не тот</font>';}
      }
      else {console.log('<font color="red">Упс, так не катит</font>');}
    });

Ни окна выбора, ни сообщения, в консоли.
Что посоветуете?

Автор: Majestio 17.07.24, 00:07
Цитата cupoma58 @
Что посоветуете?

Посоветую посмотреть мой пример ;)
<{CODE_COLLAPSE_OFF}><{CODE_WRAP_OFF}>
    <!DOCTYPE html>
    <html>
    <head>
      <meta charset='utf-8'>
      <meta name='viewport' content='width=device-width, initial-scale=1, shrink-to-fit=no'>
      <title>Пример для showOpenFilePicker</title>
      <style>
        .player {
          background-color: orange;
        }
        .player::-webkit-media-controls {
          background-color: rgba(0, 0, 0, 0.1);
          color: white;
        }
        .player::-webkit-media-controls-panel {
          background-color: transparent;
        }
      </style>
    </head>
    <body>
      <video src="" id="player" class="player" controls></video>
      <br>
      <button id="baton">Клик сюда!</button>
      <script>
        window.onload = function () {
          var baton = document.getElementById("baton");
          baton.addEventListener('click', async () => {
            const pickerOpts = {
              types: [
                {
                  description: "Видосы (.avi, .mkv, .mp4, .webm)",
                  accept: {
                    "video/avi": [".avi"],
                    "video/x-matroska": [".mkv"],
                    "video/mp4": [".mp4"],
                    "video/webm": [".webm"],
                  },            
                },
              ],
              excludeAcceptAllOption: true,
              multiple: false,
            };
            try {
              const [handle] = await window.showOpenFilePicker(pickerOpts);
              const file = await handle.getFile();
              const fileURL = URL.createObjectURL(file);
              const player = document.getElementById("player");
              player.src = fileURL;
              player.play();
            } catch (err) {
              console.log('Error "' + err.name + '": ', err.message);
            }
          });
        };
      </script>
    </body>
    </html>

Автор: cupoma58 17.07.24, 07:54
Ну, м-м-м, попробуем. Надо разобраться. Вообще-то, я предполагал наличие, в JS, чего-то вроде JFileChooser, но более гибкого.

Автор: cupoma58 17.07.24, 10:44
Цитата cupoma58 @
Посоветую посмотреть мой пример

Благодарю за скрипт. В этом виде он, у меня, заработал
<{CODE_COLLAPSE_OFF}><{CODE_WRAP_OFF}>
    f.addEventListener('click', async ()=>{
        if (window.isSecureContext){
            try {
                    var [handle] = await window.showOpenFilePicker(),
                    file = await handle.getFile(),
                    fileURL = URL.createObjectURL(file),
                    v = document.getElementById('v');
                    v.src = fileURL;
            }
            catch (err){console.log('Error "' + err.name + '": ', err.message);}
        }
    });

...в другом бро. Мой, "рабочий" бро, не знал - что такое showOpenFilePicker. Пришлось скачать более современную версию. Я, так, понимаю - "добавить"
showOpenFilePicker, в старую версию, будет затруднительно?

Автор: Majestio 17.07.24, 13:10
Цитата cupoma58 @
в старую версию, будет затруднительно?

Думаю да. Глянь доку по нему - там таблица реализаций в браузерах.

Powered by Invision Power Board (https://www.invisionboard.com)
© Invision Power Services (https://www.invisionpower.com)