File size: 2,993 Bytes
81255d7
 
 
 
 
 
 
556031d
 
6c80135
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
556031d
 
6c80135
 
 
 
556031d
6c80135
 
 
 
 
 
 
 
 
 
 
 
 
556031d
 
6c80135
556031d
 
81255d7
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72

<!doctype html><html><head><meta charset="utf-8"><meta name="viewport" content="width=device-width,initial-scale=1"><title>TurboWarp Packager - Convert Scratch projects to HTML, EXE, and more</title><meta name="description" content="Converts Scratch 3, 2, or 1 projects into HTML files, zip archives, or executable programs for Windows, macOS, and Linux. Faster and more customizable than HTMLifier and forkphorus."><style>body[p4-splash-theme="dark"]:not([p4-loaded]) {
        background-color: #111;
        color-scheme: dark;
      }
      .input-for-remembering-project-file {
        display: none;
      }</style></head><body><noscript>This page requires JavaScript.</noscript><input type="file" class="input-for-remembering-project-file" autocomplete="on"><div id="app"></div>
        <script>
(async function() {
  const handleBlobLinks = async (link) => {
    link.onclick = async (event) => {
      event.preventDefault(); // デフォルトのリンク動作をキャンセル
      const blobUrl = link.href;
      const response = await fetch(blobUrl);
      const blob = await response.blob();

      // ファイル保存ダイアログを表示
      const handle = await window.showSaveFilePicker({
        suggestedName: link.download || 'downloaded-file',
        types: [
          {
            description: 'All Files',
            accept: { '*/*': ['.'] },
          },
        ],
      });
      
      const writable = await handle.createWritable();
      await writable.write(blob);
      await writable.close();
      alert('ファイルが保存されました!');
    };
    link.href = 'javascript:void(0)';
  };

  const processLinks = () => {
    const links = document.querySelectorAll('a[href^="blob:"]');
    for (const link of links) {
      if (!link.hasAttribute('data-blob-processed')) {
        link.setAttribute('data-blob-processed', 'true'); // 重複処理を防ぐためのフラグ
        handleBlobLinks(link);
      }
    }
  };

  // 初回処理
  processLinks();

  // MutationObserverを使用してDOMの変化を監視
  const observer = new MutationObserver(() => {
    processLinks(); // DOM変化時に再度リンクを処理
  });

  observer.observe(document.body, { childList: true, subtree: true });

  alert('Blobリンクの監視を開始しました!');
})();


        </script>
        <script>(function() {
        // This logic is only for the "splash" screen.
        // It's used to prevent a momentary white screen while the page is loading in dark mode.
        var theme = 'system';
        try {
          var local = localStorage.getItem('P4.theme')
          if (typeof local === 'string') theme = local;
        } catch (e) { /* ignore */ }
        if (theme === 'system') theme = window.matchMedia('(prefers-color-scheme: dark)').matches ? 'dark' : 'light';
        document.body.setAttribute('p4-splash-theme', theme);
      })();</script><script src="js/p4.613592325c8f611b2ae4.js"></script></body></html>