2011-01-18 1 views
3

с использованием этой метки и скрипта. Я могу создать ссылку «перетащить файл на рабочий стол» для Google Chrome 8.0.552.237 OSX (yay!). Моя проблема в том, что я не могу указать имя динамически созданного файла сценария - Google Chrome ALWAYS называет его «download.js», хотя я указал, что он должен называться «customFileName.js».Google Chrome Перетащите на рабочий стол: пользовательские имена файлов

Может ли кто-нибудь дать мне руководство? Это ошибка, или я делаю что-то неправильно? Я знаю, что динамическое создание двоичных файлов в браузере, вероятно, является неправильной стороной края кровотечения, и я должен быть счастлив, что он работает вообще, но возможность назвать файлы будет очень полезна для конкретного приложения, м здание. Исходный код commented- заранее спасибо :)

<!DOCTYPE html> 
<html> 
    <head></head> 
    <body> 
     <script> 

      var mimeType= 'text/javascript' 
      , javaScript= 'alert("hello");' 
       // convert javascript to binary string 
      , binaryText= btoa(javaScript) 
       // create data uri 
      , dataUri= "data:text/javascript;charset=utf-8;base64," + binaryText 
       // a conventional http url pointing to an image 
      , resourceUri= 'http://www.chromium.org/_/rsrc/1220198801738/' 
          + 'config/app/images/customLogo/customLogo.gif?revision=2' 

       // drag this link to your desktop or other folder and 
       // Google Chrome will download a file to that location 
       // called "download.js" - it should be called "customFileName.js" 
      , draggableScriptAnchor= document.createElement('a') 

       // drag this link to your desktop or other folder and 
       // Google Chrome will download a file to that location 
       // called "customFileName.gif" as expected 
      , draggableResourceAnchor=document.createElement('a') 

      // setup drag to desktop 

      // set this anchors href to the data uri 
      draggableScriptAnchor.href= dataUri; 
      draggableScriptAnchor.innerText= 'Drag dynamic script'; 
      // listen for drag events 
      draggableScriptAnchor.addEventListener 
      (
       'dragstart' 

      , function (mouseEvent) 
       { 
        mouseEvent.dataTransfer.setData 
        (
         "DownloadURL" 
         // note that the convention for this string is 
         // mimetype:filename:url and that the "file" 
         // is given the name "customFileName.js" 
        , "text/javascript:customFileName.js:" + dataUri 
        ) 
       } 

      , false  
      ); 

      // set this anchors href to a conventional http url 
      draggableResourceAnchor.href= resourceUri 
      draggableResourceAnchor.innerText= "Drag image"; 

      // listen for drag events 
      draggableResourceAnchor.addEventListener 
      (
       'dragstart' 

      , function (mouseEvent) 
       { 
        mouseEvent.dataTransfer.setData 
        (
         "DownloadURL" 
         // as above, except that this time the mimetype 
         // is image/gif and the file name is customFileName.gif 
         // THIS WORKS AS EXPECTED 
        , "image/gif:customFileName.gif:" + resourceUri 
        ) 
       } 
      ) 

      // add elements to the DOM 
      document.body.appendChild(draggableScriptAnchor); 
      document.body.appendChild(document.createElement('br')); 
      document.body.appendChild(draggableResourceAnchor); 
     </script> 
    </body> 
</html> 

ответ

2

Кажется, это ошибка в Chrome. Вопрос «Drag and drop of 'DownloadURL' type ignores specified filename for data URLs» был исправлен недавно, вероятно, должен быть исправлен в Chrome версии 13.

Если кто-то хочет протестировать, отметьте это live example.

+0

Почти год спустя - может подтвердить, что это было ошибка, и что теперь она работает в Chrome 19 (возможно, ранее зафиксирована раньше) – VLostBoy

0

Когда я запускаю код на WIN 7, то я имя файла просто «скачать» без .js расширения. Когда я запускаю его на Win 2008, я получаю точное имя файла - customFileName.js

+0

У вас есть win7, сконфигурированный для отображения всех расширений файлов –

+0

Спасибо за отзыв Ashot- @ James - также спасибо, но это не значит, что я хочу узнать о поведении Chromes, а не о ОС. – VLostBoy

+0

мой вопрос должен был стать уточняющим вопросом для Ашота. Он сказал, что имя файла просто загружается, но если он не настроен на отображение всех расширений, то имя файла может быть download.js, но .js скрывается. –