2015-07-21 12 views
12

ich die nächste Ausgabe haben, habe ich Seite, die mit Ajax öffnet und dynamicly wie diese soSchienen Ajax-URL ändern

window.history.pushState(null, null, "/desktop/manage/add"); 

URL des Browsers ändern, wenn ich in der „add“ Seite bin und öffnen Sie eine beliebige Seite mit Get/Post-Anfrage (noch eine andere Website) und drücken Sie auf "Zurück" -Button im Browser Ich bekomme nicht den vollständigen HTML-Code der Seite, sondern nur Ajax Teil. So: pic

Wie kann das behoben werden?

P.S Wenn ich window.history.pushState (null, null, "/ desktop/manage/add"); alles funktioniert gut, aber ich muss die URL des Browsers ändern.

UPD: Ich öffne diese Seite per Post Anfrage, NO ajax enter image description here

dann öffne ich "manage/hinzufügen" Seite über AJAX enter image description here

Dann auf google.com (jede Seite) und klicken Sie auf zurück-Taste enter image description here

und meine ajax geladen Seite nicht voll HTML-Seite, gibt es nur ajax Teil nur wie Text: enter image description here

ich über dieses Thema gelesen und ussually Schienen Programmierer Ereignis hinzufügen Taste sichern klicken Sie wie folgt application.js:

$(window).on('popstate', function() { 
    $.get(document.location.href) 
    }); 

Das funktioniert aber nur Benutzer google nicht wird gehen (oder anderen Websites) funktioniert es nur, wenn sie meine Website durchlaufen und auf die Schaltfläche Zurück klicken.

UPD2: /add Controller

def addProduct 

@categories = Market.where("depth = ? and title != ''", 0).reorder(:title); 
     @tags = UserTag.where(user_id: current_user.id).includes(:tags); 
     respond_to do |format| 
      format.html{render layout: "desktop_layout"} 
      format.js {} 
     end 
    end 

hier ist mein addProduct.js: (das gerenderte Datei, die Sie in Screenshot zu sehen, nachdem Zurück-Button geklickt)

window.history.pushState('page212', 'Mikee.kz', '/desktop/manage/add'); 
    $("#rightBlock").html("<%= escape_javascript(ajax_section id:'page', :render => 'myadd') %>"); 
+0

Können Sie die Frage bearbeiten, um die Ausgabe aus Ihrem Protokoll einzuschließen, wenn Sie zwischen den Seiten wechseln? –

+0

@JamesSmith, es gibt kein Protokoll, nachdem ich auf den Zurück-Button geklickt habe ( – mondayguy

+0

) Ah richtig, pushState lässt nichts geladen werden. Https://developer.mozilla.org/en-US/docs/Web/Guide/API/DOM/Manipulation_der_Browser_History Ist/desktop/manage/eine Seite hinzufügen, die der Benutzer zuvor besucht hätte? –

Antwort

3

Ich hatte das gleiche Problem eine Weile zurück, jedoch mit replaceState() stattdessen. Das habe ich zuerst nicht bemerkt, aber mein Entwicklerkollege hat mich darauf aufmerksam gemacht. Es stellte sich heraus, dass ich es nicht bemerkt hatte, weil ich Firefox benutzte und dies scheint ein Bug zu sein, der ausschließlich für Chrome/Chromium verwendet wurde. In der Tat scheint es ein Fehler für a while now gewesen zu sein, aber Google hat es noch nicht behoben.

Das heißt, es scheint, dass gibt es keine echte Lösung für diese, zumindest bis Google es behebt. Wenn Sie die Seite einfach neu laden, wird das Problem natürlich verschwinden, aber Sie sehen immer noch den hässlichen Code. Und Sie könnten einfach kein Chrom/Chrom verwenden, aber das ist auch keine Lösung.

Verwandte Themen