Как изменить содержимое после загрузки страницы (JS)? - PullRequest
1 голос
/ 14 февраля 2012

Я бы хотел, чтобы JavaScript запускался после загрузки страницы, как в примере ниже, с задержкой в ​​6 секунд. Сразу после загрузки страницы остальная часть JS теряется (очевидно) ... Есть идеи, как изменить содержимое после загрузки страницы без нажатия кнопки?

javascript:window.location = "http://example.com"; 
setTimeout(function() {
    document.getElementById('lightbox').style.display = 'none';
}, 6000);

Ответы [ 4 ]

3 голосов
/ 14 февраля 2012

После установки window.location исходная страница будет выгружена до загрузки новой страницы браузером.Это означает, что ваш скрипт пропадет до начала загрузки новой страницы и, следовательно, больше не сможет изменять новый HTML.

Такое поведение присуще модели безопасности браузера.Без него вы могли бы внедрить любой JavaScript в любой веб-сайт по вашему выбору, что было бы огромной угрозой безопасности.То, что вы просите, это так называемый XSS (для межсайтового скриптинга), который не позволяет браузеру применять так называемую SOP (для той же оригинальной политики).

Есть несколько распространенных способов работыОбойти это ограничение безопасным способом:

  1. Настройте прокси-сервер для обслуживания как вашего JavaScript, так и исходного сайта.Таким образом, и ваш сценарий, и исходный сайт поступают из одного домена и соответствуют политике оригинального браузера (SOP).Вы можете запустить оригинальный сайт в iframe с вашим пользовательским скриптом, занимающим окно верхнего уровня.В качестве альтернативы вы можете внедрить ваш скрипт в HTML при его получении через прокси.

  2. Запустите ваш скрипт как надстройку браузера или пользовательский скрипт.Если вы решите сделать это, пользователь должен будет специально предоставить вашему сценарию права на локальный запуск с повышенными правами.Greasemonkey популяризировал клиентские скрипты для Firefox несколько лет назад, но в последнее время они, похоже, утратили силу.

  3. Попросите владельца сайта включить ваш скрипт.Я сомневаюсь, что это правильный вариант для вашей ситуации.Но если это верный вариант, он, безусловно, самый простой.

  4. Попросите пользователя запустить ваш скрипт после загрузки сайта.Это, вероятно, также недопустимо для вас, но если оно действительно, оно снова будет очень простым решением.

1 голос
/ 14 февраля 2012

Ваш пример показывает, что вы сначала перенаправляете, а затем пытаетесь скрыть #lightbox.Этот скрипт не будет работать, потому что вы перенаправляете браузер на другой сайт до того, как #lightbox будет скрыт.

Короче говоря, вы не можете использовать Javascript предыдущей страницы для манипулирования DOM следующей страницы, если вы перенаправляете пользователя надругой URL (или даже тот же URL).Только Javascript, находящийся «на открытой в данный момент странице», может манипулировать открытой на данный момент страницей, а других страниц нет.

0 голосов
/ 14 февраля 2012

Это должно сделать работу:

$(window).bind('load', function() {
// your code here
});

Затем просто добавьте задержку к добавленному коду с помощью .delay("6000");

Вставленный код будет работать только после полной загрузки вашей страницы.

0 голосов
/ 14 февраля 2012

Я не понял, что вы говорите. JS потерян? Пожалуйста, будьте яснее.
Я думаю, что вы говорите о функции jquery ready , которая запускается после того, как DOM готов.
Или в другом случае попробуйте использовать функцию window.onload().

...