2013-04-14 2 views
1

Я хотел бы открыть другую веб-страницу из javascript (например, по умолчанию, а не полноэкранный iframe или window.open) и запустить код javascript после его загрузки.запустить javascript при открытии другой страницы

Шаги:

  1. определить функцию JavaScript
  2. Перейдите на другую страницу
  3. Browser работает функция в новом контексте

страницы есть ли способ для достижения этой цели? единственный способ, который я помню, будет эмулировать это, загрузив страницу с помощью ajax и заменив document.body.innerHtml, затем запустив функцию, но это не изменит location.href, так, например, кнопка «Назад» или закладки не будут работать. также относительные ссылки пришлось переписать при загрузке и т. д.

PS: Я знаю, что это был бы уродливый XSS, но это необходимо, например, при написании букмарклетов, которые загружают страницу и заполняют форму автоматически.

+0

Если вы владеете этой страницы, а затем положить сумы t в первую очередь. – Joseph

+0

уверен, но я не владею им. – nonchip

ответ

0

OK, Научные результаты:

невозможные методы:

  • используя некоторую постоянную функцию для запуска на новой странице (как я предложил в вопросе)
  • с помощью IFRAME, заменяющий целую страницу (уродливая и запрещенная в большинстве браузеров)

Overkill метода:

  • написать плагин для браузера
  • получить владельца удаленной страницы, чтобы принять некоторые GET аргумент и делать вещи для вас

Остаточный метод 1, требующий взаимодействия с пользователем:

(function(){ 
    if(self.location.href!=targetlocation){ 
    window.alert("Please run this bookmarklet again upon loading the page."); 
    self.location.href=targetlocation; 
    }else{ 
    doSomething(); 
    } 
    return false; 
})(); 

Остаточный метод 2, делая некоторые неприятные прокси-материалы:

  • напишите некоторый скрипт php/etc для «прокси» целевая страница
  • теперь вы можете:
    • использовать IFRAME, потому что это не межсайтовое больше
    • переписать страницы на стороне сервера, прежде чем доставить в браузер (делает «Overkill метод: GET аргумент» самостоятельно)

Пример:

<?php //USAGE: ?uri=http://www.google.com&search[0]=L2dvb2dsZS8K&replace[0]=dGVzdAo= 
    $page=file_get_contents($_GET["uri"]); 
    $count = min(count($_GET["search"]),count($_GET["replace"]),100); 
    for ($i = 0; $i < $count; $i++) { 
    $page=preg_replace(base64_decode($_GET["search"][$i]), 
         base64_decode($_GET["replace"][$i]), $page); 
    } 
    echo $page; 
?> 
2

Нет, вы не можете этого сделать. Это позволит вам делать такие вещи, как кражи файлов cookie для захвата сеанса за кулисами, поэтому никакие браузеры не позволяют вам это делать вообще.

1

Хотя могут быть некоторые законные варианты использования, по соображениям безопасности вы не можете этого сделать, если новая страница не находится в одном домене.

Что вы можете сделать, это написать расширение для браузера, если целевой браузер имеет поддержку расширений,

Или сказать пользователям, чтобы открыть целевую страницу, и использовать букмарклет на этом контексте.

+0

, поэтому поток будет «if (location.href! =« ... ») {alert (« Запустите меня снова при загрузке страницы »); location.href =" ... "} else {...} «? – nonchip

+0

Да, это сработает. – fardjad

+0

заменил бы всю страницу iframe даже работой, или браузер («браузер», являющийся каким-то универсальным навигатором, кроме IE: -P) запретил это из-за возможностей XSS? – nonchip

1

Вы можете сделать все эти вещи, если вы загрузите другую страницу с вашего сервера:

Допустим, вы хотите загрузить http://other.com на своем сайте http://mine.org Вы пишете маленький скрипт, стороне сервера, который можно назвать так: http://mine.org/load.php?site1 (с URLs на все сайты, которые вы хотите загрузить перечисленные в load.php или в какой-то базе данных)

но теперь ваш сайт имеет проблемы с безопасностью: JavaScript встраивается в http://other.com работает в ваших сайтов контексте.

+0

хорошая идея, не подумал об этом, спасибо – nonchip

Смежные вопросы