jQuery заменяет весь HTML

#javascript #jquery #drupal #drupal-7

#javascript #jquery #drupal #drupal-7

Вопрос:

Я пытаюсь заменить весь HTML (включая теги HTML) на другую страницу. Я пытаюсь сделать так, чтобы веб-сайт действовал как приложение даже при переходе на другую страницу.

Вот код :

 (function($) {
  Drupal.behaviors.loadingPage = {
    attach: function(context,settings) {
      $('a').click(function(event) {
        event.preventDefault();
        // Create the loading icon
        // ...
        $.ajax({
          url: $(this).attr('href'),
          success: function(data) {
            $('html').replaceWith(data);
          }
        });
      });
    }
  };
})(jQuery);
  

Я пробовал несколько вещей. replaceWith() вызывает ошибку jQuery в jquery.js после удаления HTML-тега, я думаю, это потому, что он больше не может найти родительский элемент, чтобы добавить замену.

Лучший результат, который я получил document.write(data) , был с. Проблема в том, что код javascript на загруженной странице не выполняется.

У кого-нибудь есть идея получше?

Комментарии:

1. Попробуйте заменить содержимое <html> тега содержимым данных? Похоже <html> , у него нет никаких полезных атрибутов.

2. Тем не менее, единственное, чего это достигнет, — это то, что вы выдаете себя за другую страницу, пока пользователь не нажмет на ссылку на ней.

3. @Sii во всяком случае, он содержит результаты тестирования браузера, которые вы не хотите переделывать, потому что мы все используем Modernizr, верно? 😛

4. Если вы все равно перезагружаете всю страницу, почему вы делаете это с помощью ajax? Просто установите window.location новый URL-адрес или отправьте форму, если вам нужно, чтобы это был POST вместо GET .

5. @Sii переменная data содержит HTML-тег, поэтому я не могу просто заменить его. Заостренный: смотрите мой ответ на nnnnnn ниже.

Ответ №1:

Идея получше? Да, просто загрузите новую страницу обычным способом, установив window.location вместо использования AJAX. Или отправьте форму.

В противном случае, если вы хотите загрузить что-то, чтобы заменить все видимое содержимое текущей страницы, но сохранить сценарий текущей страницы, поместите все видимое содержимое во фрейм размером, чтобы заполнить окно браузера, которое, опять же, вы бы не заполнили с помощью AJAX.

(Мне нравится AJAX, но я не понимаю, почему вы используете его для замены целой страницы.)

Комментарии:

1. как я уже говорил в своем первом посте (но плохо, я думаю), я пытаюсь, чтобы мой веб-сайт действовал как реальное приложение, а не страница в браузере. Для этого я помещаю «значок загрузки» во время загрузки внутренней ссылки, на которую нажата ссылка. Я просто хотел бы знать, как это сделать :-). Использование фреймов позволит мне это сделать? Я просто использовал AJAX, потому что так я думал.

2. В качестве совершенно субъективного отступления: одностраничные приложения невероятно раздражают, а тем более выдают себя за сторонние сайты (вспомните фиаско DiggBar). Пользователи веб-приложений ожидают, что навигация в приложении изменит страницы или, по крайней мере, URL-адреса.

3. Кроме того, да, канонический способ встраивания другой веб-страницы в вашу — это фреймы или iframes. Имейте в виду, что вы не можете получить доступ к их содержимому из своего скрипта, если они поступают из другого домена по соображениям безопасности.

4. Чтобы следовать из того, что сказал Sii, если это все ваше «приложение», исходящее из одного домена, ваши фреймы могут получать доступ к контенту друг друга (включая вызывающие функции, определенные в других фреймах и т.д.). Руководство по фреймам выходит за рамки ответа здесь.

5. Хорошо, спасибо, ребята, за ответы 🙂 @Sii: я планирую изменить URL-адреса, используя code.google.com/web/ajaxcrawling/docs/getting-started.html