Я хотел бы заставить XML-документ в JavaScript затем иметь диалоговое окно сохранения, появляются.
До сих пор единственные идеи, которые я видел, состоят в том, чтобы сохранить XML к iframe и сохранить тот документ - но кажется, что можно только сделать это в IE? Кроме того, то, что я мог создать URI данных и место это в ссылке. Мой страх здесь состоит в том, что это просто откроет XML-файл в окне, а не предложит пользователю сохранять его.
Я знаю, что, если я требую, чтобы JavaScript был локален, я могу повысить полномочия и просто непосредственно сохранить файл (или надо надеяться заставить диалоговое окно сохранения появляться). Однако я очень предпочел бы решение, где я не требую повышенных полномочий (даже Firefox 3.6 только решение).
Я приношу извинения, если это нарушает чью-либо чувствительность (например, не поддерживая каждый браузер). Я в основном хочу записать, что офлайновое приложение и Javascript/HTML/CSS, кажется, лучший кандидат, рассматривающий сложность требований и доступное время. Однако у меня есть это единственное требование способности сохранить данные, которые должны быть преодолены, прежде чем я смогу выбрать эту строку разработки.
Как насчет этого сценария 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
});
Без какого-либо понимания ваших конкретных требований я бы не рекомендовал чистое решение 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 на своей машине.
Javascript не разрешено писать на локальную машину. Ваш вопрос похож на этот.
Предлагаю создать простое настольное приложение.
На локалхосте PHP сервер в порядке? Web традиционно не может сохранять на жесткий диск из-за соображений безопасности. PHP может передавать файлы, хотя для этого требуется сервер.
Плагины для печати в PDF доступны для всех браузеров. Установите их один раз и печатайте в PDF всегда. Затем вы можете использовать javascript или Flash для вызова функции Print.
Кроме того, если вы разрабатываете для среды, где доступ в Интернет ограничен, лучше использовать VB.NET или другой настольный язык.
EDIT:
Вы можете использовать функцию Print браузера.
Вы ищете что-то вроде этого?
Если PHP в порядке, было бы намного проще.
В IE вы могли бы использовать document.execCommand, но я отмечаю, что IE не является опцией.
Вот кое-что, что, похоже, может помочь, хотя оно не подскажет диалог SaveAs, https://developer.mozilla.org/en/Code_snippets/File_I%2F%2FOL.
Один простой, но странный способ сделать это, не требующий Flash, - создать
с URI данных для его href
. У этого даже есть неплохая кроссбраузерная поддержка, хотя для IE он должен быть не ниже версии 8, а URI должен быть <32k. Похоже, что кто-то еще из SO может больше сказать по этой теме.