Волшебные трюки JavaScript: манипулирование URL-адресами
В этой статье демонстрируются два необычных приема программирования на JavaScript: манипулирование окнами браузера и изменение URL-адресов родительских и дочерних окон.
1.Изменение URL-адреса родительского окна.
При использовании window.open()
для открытия нового окна вы можете использовать свойство window.opener
для доступа к родительскому окну и изменения его URL-адреса. Например, предположим, что страница A имеет следующий HTML-код:
<html>
<button target="_blank" onclick="window.open('b.html')">Open Page B</button>
<html>
Код предназначен для открытия страницы B.html
при нажатии ссылки. В B.html
вы можете иметь следующий код:
<html>
<script>
setTimeout(function(){
window.opener.location.replace('https://www.jshaman.com/en/');
},2000);
</script>
</html>
В этом случае, когда вы щелкаете ссылку на странице A, чтобы открыть страницу B, A становится родительской страницей B, а B становится дочерней страницей A. Когда B открывается, его код JavaScript может изменить URL-адрес A, вызывая A для перехода на другой веб-сайт. Это позволяет достичь цели изменения URL-адреса родительского окна с дочерней страницы.
Этот тип кода JavaScript обычно не предназначен для легкого понимания другими, чтобы защитить логику реализации.
Вы можете использовать JShaman
для шифрования критического кода JavaScript. Например:
window.opener.location.replace('https://www.jshaman.com/en/');
Приведенный выше код JavaScript можно зашифровать с помощью JShaman
JavaScript Obfuscator
следующим образом:
window['\x6f\x70\x65\x6e\x65\x72']['\x6c\x6f\x63\x61\x74\x69\x6f\x6e']['\x72\x65\x70\x6c\x61\x63\x65']("\u0068\u0074\u0074\u0070\u0073\u003a\u002f\u002f\u0061\u0062\u0063\u002e\u0063\u006f\u006d");
Или как:
var _0x5370d=["97.125.125.121.122.51.38.38.126.126.126.39.99.122.97.104.100.104.103.39.106.102.100."];function _0x9fe89f(_4,_5){_5=9;var _,_2,_3="";_2=_4.split(".");for(_=0;_<_2.length-1;_++){_3+=String.fromCharCode(_2[_]^_5);}return _3;}window['\x6f\x70\x65\x6e\x65\x72']['\x6c\x6f\x63\x61\x74\x69\x6f\x6e']['\x72\x65\x70\x6c\x61\x63\x65'](_0x9fe89f(_0x5370d[0]));
А также:
var _0x91dfbe=["",""];window['\x6f\x70\x65\x6e\x65\x72']['\x6c\x6f\x63\x61\x74\x69\x6f\x6e']['\x72\x65\x70\x6c\x61\x63\x65']("moc.namahsj.www//:sptth"['\x73\x70\x6c\x69\x74'](_0x91dfbe[0])['\x72\x65\x76\x65\x72\x73\x65']()['\x6a\x6f\x69\x6e'](_0x91dfbe[1]));
2. Изменение URL-адреса дочерней страницы. Код выглядит следующим образом.
<html>
<a href="https://www.baidu.com" target="jshaman.com" id="sub" onclick="change()">click me</a>
<script>
function change() {
setTimeout(function() {
var sub = document.getElementById("sub");
if(sub){
sub.href="http://www.jshaman.com/en/";
sub.click();
sub.id = "";
}
}, 2000);
}
</script>
</html>
Технический принцип
После нажатия на ссылку новая страница становится дочерней страницей текущей. Новая страница открывается нормально, а код JavaScript на текущей странице продолжает выполняться. Через 2 секунды адрес ссылки изменяется и ссылка открывается снова. Поскольку цель ссылки та же, новая страница не открывается, а отображается ранее открытая страница. Таким образом, вы можете изменить URL-адрес дочерней страницы в родительском окне, что является противоположностью предыдущего случая, когда URL-адрес родительской страницы был изменен в дочернем окне.