ウィンドウのpopstateイベントにバインドするAJAX呼び出しがあります。クエリ文字列から引数を解析していることを除いて、これは機能します。問題は、ページが読み込まれるときにajax呼び出しがウィンドウにバインドされるため、URLが読み込まれるときに引数が変更されないことです。ウィンドウにリスナーを追加すると、バインドするのではなくajax呼び出しを実行できれば、毎回クエリ文字列が再解析されると思います。
たとえば、ページがdomain.com?x=1&y=2をロードする場合、私の呼び出しはx=1とy=2を送信します。ただし、ポップステートが起動してdomain.com?x=1&y=2&z=3になると、x=1とy=2が送信されます。
これが私の電話です
var ajax_path = Drupal.settings.views.ajax_path;
$.each(Drupal.settings.views.ajaxViews, function (i, settings) {
var view = '.facetapi-facetapi-links';
element_settings = {
url: ajax_path,
submit: settings,
setClick: false,
event: 'popstate',
selector: view,
progress: { type: 'throbber' }
};
var viewData = {};
$.extend(
viewData,
settings,
Drupal.Views.parseQueryString(document.URL),
Drupal.Views.parseViewArgs(document.URL, settings.view_base_path)
);
$.extend(viewData, Drupal.Views.parseViewArgs(document.URL, settings.view_base_path));
element_settings.submit = viewData;
var ajax = new Drupal.ajax(false, window, element_settings);
});
私が考えていたのはこれをやっていることでしたが、どうすればいいのかわかりません。または、Drupal.ajax.prototype.beforeSendを何らかの方法で使用することは可能ですか?
window.addEventListener("popstate", function(e) {
//execute ajax here so it reparses document.url
}