Cum să reîncărcați javascript fără a reîmprospăta pagina (Programare, Javascript)

Întrebările MyDaftQuestions a intrebat.
a intrebat.

Avem un software care recreează fișierele javascript. Trebuie să le putem reîncărca în DOM fără a reîmprospăta pagina. Acest lucru înseamnă că fișierul javascript original (deja încărcat de browser) s-a modificat. De obicei, o reîmprospătare a browserului rezolvă această problemă, dar noi nu putem face acest lucru din cauza pierderii stării altor controale.

Căutările mele în acest sens au dat numai rezultate referitoare la reîmprospătarea browserului cu javascript, ceea ce nu este ceea ce doresc.

Este posibil să reîncărcați fișierul javascript fără a reîmprospăta browserul doar cu JavaScript (fără JQuery/Angular sau orice altă bibliotecă/framework terță parte etc.)?

Comentarii

  • Sunt bucuros să folosesc Ajax @Netzach, dacă știți cum să o faceți –  > Por Întrebări de la MyDaftQuestions.
  • în esență, acest lucru implică căutarea în arborele de dom a scriptului existent și înlocuirea acestuia. totuși, nu vă așteptați ca acest lucru să „reseteze” memoria browserului; variabilele și metodele din scriptul original vor fi în continuare accesibile. vezi javascriptkit.com/javatutors/loadjavascriptcss2.shtml pentru o idee generală despre acest proces. –  > Por Claies.
  • posibil duplicat: stackoverflow.com/questions/21294/… – –  > Por muratgu.
  • Nu este foarte clar ce încercați să faceți aici. Ce vrei să spui prin „software care recreează fișiere javascript”? Acest lucru se întâmplă pe client sau pe server? Se întâmplă în mod dinamic ca răspuns la cererile ulterioare ale clientului? –  > Por Jared Smith.
  • Comentariu bun @JaredSmith, am actualizat răspunsul meu care sper că vă răspunde. Practic, clientul încarcă javascript. Efectuează modificări care fac unele modificări pe server . Serverul suprascrie apoi fișierul javascript existent. –  > Por MyDaftQuestions.
4 răspunsuri
svidgen

În cazul în care intenția dvs. este de a furniza date sau nou widget-uri:

Vanilla AJAX este simplu și omniprezent. Faceți asta.

Dacă nu sunteți de acord cu asta, indiferent de motiv, și dacă extrageți date noi exclusiv din cutii pe care le controlați, puteți, de asemenea, să dați JSONP o încercare.

var s = document.createElement('script');
s.src = 'path/to/script-that-injects-data-or-NEW-widgets.js';
document.body.appendChild(s);

Dacă intenția dvs. este de a „actualiza” pagina sau de a înlocui funcționalitatea:

Pur și simplu nu faceți acest lucru. În timp ce puteți adăuga cu ușurință scripturi noi, nu puteți „curăța” în mod fiabil pagina de scripturi sau variabile vechi fără o mulțime de contabilitate. Cu excepția cazului în care scripturile dvs. foarte foarte foarte mult foarte simple, vă puteți aștepta la o mulțime de probleme.

O soluție mai bună ar fi să notificați utilizatorul cu privire la actualizări, să îi cereți să reîmprospăteze pagina și să vă asigurați că aplicația dvs. se poate reinitializa rapid la starea anterioară.

În cele din urmă, dacă doriți să „actualizați” aplicația pe loc, veți dori oricum să reîmprospătați totul în spatele scenei. Iar asta înseamnă că trebuie să știți cum să reconstruiți totul pentru a se potrivi cu starea existentă/precedentă oricum. În plus, trebuie să ar putea face acest lucru. Dar, va fi mai ușor să reîmprospătați pur și simplu pagina, ceea ce asigură mai bine o stare curată și compatibilă, fără prea multă agitație.

Comentarii

  • Ideea despre actualizarea codului pentru a înlocui funcționalitatea ESTE ceea ce face programul. Din păcate. Este în afara controlului meu, a fost codat prost de către băieții de la C, care sunt oarecum de modă veche (este un singur fișier de 20k linii de javascript… nu există testabilitate etc.). 🙁 Indiferent, sunt de acord cu punctul de vedere, ca atare, consider că, deși nu este soluția reală de care am nevoie, este totuși răspunsul corect. –  > Por MyDaftQuestions.
Maxim Egorushkin

Este posibil.

Aruncați o privire la lite-server:

Server node de dezvoltare ușoară numai pentru node care servește o aplicație web, o deschide în browser, se reîmprospătează când se schimbă html sau javascript, injectează modificările CSS folosind socket-uri și are o pagină de rezervă când nu se găsește o rută.

Acesta utilizează BrowserSync în mod intern, care:

… injectează un mic script în fiecare pagină, care comunică cu serverul prin WebSockets. Atunci când are loc un eveniment – cum ar fi o modificare de fișier sau o acțiune de defilare – serverul trimite o notificare de actualizare către toate dispozitivele conectate.

Dacă nu puteți utiliza codul de la terți, puteți reimplementa singur ceva de acest gen.

Comentarii

  • Nu cred că putem ujse un astfel de instrument terț, tocmai mi-am editat răspunsul, dar +1 și vă rog să lăsați acest lucru (nu să-l ștergeți), deoarece este încă o opțiune dacă nu există alte opțiuni 🙂 (și va fi de ajutor pentru alții) –  > Por MyDaftQuestions.
  • @MyDaftQuestions Poți să iei ideile și să le implementezi singur. Asta fac și eu după ce ies la un pahar de băutură cu alți dezvoltatori ;))))) – -.  > Por Maxim Egorushkin.
  • @MaximEgorushkin: Poți să elaborezi răspunsul tău, pare interesant. –  > Por GauravKP.
  • @GauravKP Elaborat. –  > Por Maxim Egorushkin.
  • Întrebarea spune „fără a reîmprospăta navigarea”, dar materialul citat spune „se reîmprospătează atunci când se schimbă html sau javascript”  > Por Quentin.
StackOverMySoul
function loadScript(src, callback)
{
  var script,
      scriptTag;
  script = document.createElement('script');
  script.type = 'text/javascript';
  script.src = src;
  script.onload = script.onreadystatechange = function() {
    if (!this.readyState || this.readyState == 'complete' )
    {
      callback();
    }
  };
  scriptTag = document.getElementsByTagName('script')[0];
  scriptTag.parentNode.insertBefore(script, sriptTag);
}

Comentarii

  • înseamnă că, de îndată ce adăugăm această etichetă la dom, browserul o poate folosi? Am crezut că browserul va cunoaște referințele externe doar la încărcare… Am înțeles greșit? –  > Por MyDaftQuestions.
  • @MyDaftQuestions: Da. Atunci când adăugați un <script> element, browserul va încărca resursa și o va încărca. –  > Por Felix Kling.
TheSavage

Adăugați un alt < script src=”xxx”/ > tag în partea de jos a paginii dvs. Acesta ar trebui să încarce js și să „suprascrie” obiectele definite în scriptul dvs. anterior.