Newsgroup: it.comp.lang.javascript
Titolo: definire una URI che identifica una risorsa interna di uno script.

come in oggetto, vorrei rendere disponibile per il download un
contenuto proprio di un eseguibile javascript.
per esempio una stringa di testo, generata dinamicamente.
 
come faccio a costruire la uri corripondente?
che schema devo usare?
dove dovrei cercare la documentazione che definisce questo genere di
funzione?


gasp. la facevo più facile.
sarò io che mi complico la vita, ma quello che mi serve è qualcosa di
questo tipo:
http://www.html5rocks.com/en/tutorials/file/filesystem/
 
basato su:
http://dev.w3.org/2009/dap/file-system/pub/FileSystem/
 
 
qui molti comandi sono supportati solo per alcuni browser.
window.requestFileSystem, ad esempio, funzionerebbe solo su chrome.
per il mio scopo, dovrebbe bastare di meno, di modo che, alla fine,
sono arrivato a questo codice:
(
https://developer.mozilla.org/en-US/docs/DOM/Blob#BlobPropertyBag
)
 
var aFileParts = ["<a id=\"a\"><b id=\"b\">hey!<\/b><\/a>"];
var oMyBlob = new Blob(aFileParts, { "type" : "text\/xml" });
 
objectURL = window.URL.createObjectURL(oMyBlob)
ancora = document.createElement('a');
ancora.setAttribute('href',objectURL);
ancora.setAttribute('target','_blank');
ancora.setAttribute('type','application\/yang');
ancora.appendChild(document.createTextNode('oggetto'));
window.addEventListener("DOMContentLoaded", function() {
  document.getElementById('prova').appendChild(ancora);
});
 
ho applicato una mimetype balorda all'ancora per indurre il browser a
proporre il download, anziché visualizzare internamente il contenuto
(come potrei fare, altrimenti?).
purtroppo non so quanto sia universale questa soluzione. per esempio,
sul chromium della mia vecchia ubuntu natty, non funziona.
 
esiste qualcosa di più facile?

 esiste qualcosa di più facile?
 
Hai provato con data URL? È la cosa più facile e cross browser che mi
possa venire in mente:
 
    <a href="data:application/octet-stream,<foo>bar</foo>">Download</a>
 
Ovviamente puoi crearlo anche da JS, mail succo è questo. Non funziona
su browser che non supportano data URI di sicuro (vecchi IE, per
esempio), e non hai modo di dare un nome al file che viene scaricato,
comunque non a livello crossbrowser.
 


grazie.
fondamentalmente è proprio lo strumento che cercavo fin dall'inizio.
purtroppo mi sto accorgendo che non riesco ad associare alla risorsa
un filename usabile.
 
il browser suggerisce come filename l'intera url trasmessa, che
potrebbe essere lunghissima, costringendo l'utente a salvare con un
nome di propria iniziativa.
il blob che avevo proposto prima (a parte la compilcazione eccessiva),
proponeva un nome imposto automaticamente dal sistema, che aveva
quantomeno il vantaggio di assumere una lunghezza limitata.
 
non esiste proprio un modo di simulare un download user friendly?

 non esiste proprio un modo di simulare un download user friendly?
 
Non che io sappia, a livello cross-browser intendo.
 


Lato browser credo anch'io sia abbastanza complessa.
Lato server puoi lavorare di header: esempio in php
http://php.net/manual/en/function.http-send-content-disposition.php
 
 
A quel punto l'href puï¿½ puntare a wrapper_del_download.php e dalla 
disposition fai ricavare javascript_lato_client.js
 
Se ho capito bene la richiesta dell'OP dovrebbe risolvere
M
 
-- 
I cosi mi fattano


grazie. ma purtroppo a me serviva una soluzione pura javascript.
a quanto pare, purtroppo, il problema risiede negli standard, che per
qualche motivo poco comprensibile non hanno previsto uno strumento
specifico per una'perazione che, a me, sembra molto comune.
forse, appena le file api saranno più diffusamente implementate (la
specifica è del 2009, mi aspetto progressi rapidi) sarà possibile
lincare un documento preventivamente salvato su un file temporaneo.
 

 specifico per una'perazione che, a me, sembra molto comune.
 
JavaScript non era nato per questi scopi, lo � diventato. Operazioni del
genere erano demandate al server, e unicamente il server doveva essere
in grado di operarle. Anche tutt'oggi, il problema non si sarebbe posto
se JavaScript non fosse diventato lo strumento per creare applicazioni
vere e proprie, che possono funzionare a prescindere da internet e da un
backend server.
 
Io ho avuto un problema similare quando mi sono messo in testa di creare
un file editor come Open Web App. Il problema � che ovviamente non
potevo accedere al File System, per leggere ma soprattutto salvare i
file. Ci sono delle specifiche sul permettere ai browser di salvare file
in una sorta di file system in una sandbox, ma � ancora tutto un po'
poco implementato e definito.
 
Allora ho semplicemente impostato l'editor per collegarsi all'account
dell'utente di Dropbox, risolvendo la questione e, anzi, facendo la cosa
molto pi� figa alla fine.