Генерируйте некоторый xml в JavaScript, предложите пользователю сохранять его

Я хотел бы заставить XML-документ в JavaScript затем иметь диалоговое окно сохранения, появляются.

  1. Хорошо, если они должны нажать, прежде чем сохранение может произойти.
  2. Это *не* хорошо, если я *имею* для использования IE для достижения этого (я не должен даже поддерживать его вообще). Однако Windows является необходимой платформой (таким образом, Firefox или Chrome являются предпочтительными браузерами, если я могу только сделать это в одном браузере).
  3. Это *не* хорошо, если мне нужен веб-сервер. Но с другой стороны, я не хочу требовать, чтобы JavaScript был выполнен на локальном файле только, т.е. поднятых полномочиях - если это возможно. Таким образом, я хотел бы для выполнения локально или на *статичный* хост. Но просто локально в порядке.
  4. Нормально должным быть наклоняться назад, чтобы сделать это. Файл не будет очень большим, но доступ в Интернет мог бы или быть там, быть пятнистым или просто не быть возможностью вообще - см. (3).

До сих пор единственные идеи, которые я видел, состоят в том, чтобы сохранить XML к iframe и сохранить тот документ - но кажется, что можно только сделать это в IE? Кроме того, то, что я мог создать URI данных и место это в ссылке. Мой страх здесь состоит в том, что это просто откроет XML-файл в окне, а не предложит пользователю сохранять его.

Я знаю, что, если я требую, чтобы JavaScript был локален, я могу повысить полномочия и просто непосредственно сохранить файл (или надо надеяться заставить диалоговое окно сохранения появляться). Однако я очень предпочел бы решение, где я не требую повышенных полномочий (даже Firefox 3.6 только решение).

Я приношу извинения, если это нарушает чью-либо чувствительность (например, не поддерживая каждый браузер). Я в основном хочу записать, что офлайновое приложение и Javascript/HTML/CSS, кажется, лучший кандидат, рассматривающий сложность требований и доступное время. Однако у меня есть это единственное требование способности сохранить данные, которые должны быть преодолены, прежде чем я смогу выбрать эту строку разработки.

16
задан Adam Luter 9 February 2010 в 01:37
поделиться

7 ответов

Как насчет этого сценария downloadify ?

Он основан на Flash и jQuery, который может предложить диалоговое окно для сохранения файла в вашем компьютере.

Downloadify.create('downloadify',{
  filename: function(){
    return document.getElementById('filename').value;
  },
  data: function(){ 
    return document.getElementById('data').value;
  },
  onComplete: function(){ 
    alert('Your File Has Been Saved!'); 
  },
  onCancel: function(){ 
    alert('You have cancelled the saving of this file.');
  },
  onError: function(){ 
    alert('You must put something in the File Contents or there will be nothing to save!'); 
  },
  swf: 'media/downloadify.swf',
  downloadImage: 'images/download.png',
  width: 100,
  height: 30,
  transparent: true,
  append: false
});
6
ответ дан 30 November 2019 в 23:00
поделиться

Без какого-либо понимания ваших конкретных требований я бы не рекомендовал чистое решение Javascript / HTML. С точки зрения пользователя, вы, вероятно, получите наилучшие результаты, написав собственное приложение. Однако, если будет быстрее использовать Javascript / HTML, я рекомендую использовать локальное приложение, на котором размещен легкий веб-сервер, для обслуживания вашего контента. Таким образом, вы можете аккуратно обрабатывать сохранение файлов на стороне сервера, сосредоточив при этом большую часть своих усилий на интерфейсном приложении.

Вы можете запрограммировать веб-сервер, например, на Python или Ruby, используя очень мало строк кода и без сторонних библиотек.Например, см .:


"""
Serves files out of its current directory.
Doesn't handle POST requests.
"""
import SocketServer
import SimpleHTTPServer

PORT = 8080

def move():
    """ sample function to be called via a URL"""
    return 'hi'

class CustomHandler(SimpleHTTPServer.SimpleHTTPRequestHandler):
    def do_GET(self):
        #Sample values in self for URL: http://localhost:8080/jsxmlrpc-0.3/
        #self.path  '/jsxmlrpc-0.3/'
        #self.raw_requestline   'GET /jsxmlrpc-0.3/ HTTP/1.1rn'
        #self.client_address    ('127.0.0.1', 3727)
        if self.path=='/move':
            #This URL will trigger our sample function and send what it returns back to the browser
            self.send_response(200)
            self.send_header('Content-type','text/html')
            self.end_headers()
            self.wfile.write(move()) #call sample function here
            return
        else:
            #serve files, and directory listings by following self.path from
            #current working directory
            SimpleHTTPServer.SimpleHTTPRequestHandler.do_GET(self)

httpd = SocketServer.ThreadingTCPServer(('localhost', PORT),CustomHandler)

print "serving at port", PORT
httpd.serve_forever()

Наконец - в зависимости от того, кто будет использовать ваше приложение, у вас также есть возможность скомпилировать программу Python в Frozen Binary , чтобы конечному пользователю необязательно иметь установленный Python на своей машине.

2
ответ дан 30 November 2019 в 23:00
поделиться

Javascript не разрешено писать на локальную машину. Ваш вопрос похож на этот.

Предлагаю создать простое настольное приложение.

1
ответ дан 30 November 2019 в 23:00
поделиться

На локалхосте PHP сервер в порядке? Web традиционно не может сохранять на жесткий диск из-за соображений безопасности. PHP может передавать файлы, хотя для этого требуется сервер.

Плагины для печати в PDF доступны для всех браузеров. Установите их один раз и печатайте в PDF всегда. Затем вы можете использовать javascript или Flash для вызова функции Print.

Кроме того, если вы разрабатываете для среды, где доступ в Интернет ограничен, лучше использовать VB.NET или другой настольный язык.

EDIT:

Вы можете использовать функцию Print браузера.

0
ответ дан 30 November 2019 в 23:00
поделиться

Вы ищете что-то вроде этого?

Если PHP в порядке, было бы намного проще.

0
ответ дан 30 November 2019 в 23:00
поделиться

В IE вы могли бы использовать document.execCommand, но я отмечаю, что IE не является опцией.

Вот кое-что, что, похоже, может помочь, хотя оно не подскажет диалог SaveAs, https://developer.mozilla.org/en/Code_snippets/File_I%2F%2FOL.

0
ответ дан 30 November 2019 в 23:00
поделиться

Один простой, но странный способ сделать это, не требующий Flash, - создать с URI данных для его href . У этого даже есть неплохая кроссбраузерная поддержка, хотя для IE он должен быть не ниже версии 8, а URI должен быть <32k. Похоже, что кто-то еще из SO может больше сказать по этой теме.

0
ответ дан 30 November 2019 в 23:00
поделиться
Другие вопросы по тегам:

Похожие вопросы: