После Ajax запроса и замене части документа, если в новом содержимом был скрипт ЯндексКарт, происходит не могу понять чего - карта "улетает" в левый верхний угол, при этом указатель мыши будто она занимает весь вьюпорт.
Думал, не успевает загрузится родительский узел, ставил таймер на добавление скрипта. Не помогло.
<div id="map-yandex">
<script type="text/javascript" charset="utf-8" async src="https://api-maps.yandex.ru/services/constructor/1.0/js/?um=constructor%3A249b8467899ebba32cac0596945771de4b2aff3634dafa78bee70b68a9830e27&width=100%25&height=320&lang=ru_RU&scroll=true"></script>
</div>
Вот код, обновляющий страницу, закомментирован другой вариант замены. Ловится скрипт, чтобы добавить его потом:
build_page: function (href) {
var page_name = href.split('/').pop();
var sym = page_name.indexOf('#');
if (sym!=-1) {
var page_anchor = page_name.substring(sym);
page_name = page_name.substring(0, sym);
}
$.ajax({
url: 'get_page' + '?' + page_name,
type: 'GET',
success: function(responseText){
var jsonData = JSON.stringify(responseText);
var inner = JSON.parse(jsonData );
var incoming = $(inner[0]);
try {
var incomingScript = incoming.find('script')[0];
var incomingParent = $(incomingScript).parent();
$(incomingScript).remove();
} catch (err) {}
var sec = $('section');
sec.parent().append(incoming);
sec.remove();
// $('section').replaceWith(incoming).promise().done(function () {
// console.log(incomingScript);
// console.log(incomingParent);
// if (incomingScript && incomingParent) {
// incomingParent.append(incomingScript);
// console.log('append');
// }
// });
$('head style').remove();
for (var k=2; k<inner.length; k++) {
$('head').append(inner[k])
}
console.log(incomingScript);
console.log(incomingParent);
if (incomingScript && incomingParent) {
setTimeout(function(){incomingParent.append(incomingScript)}, 2000);
console.log('append');
}
Пример (на странице нажать на "контакты")
Перехватил скрипт в новом содержимом и добавил его после загрузки. Не могу понять, почему он выполняется некорректно.