首页 > 编程语言 >JavaScript奇技淫巧:操控URL

JavaScript奇技淫巧:操控URL

时间:2023-02-01 11:37:00浏览次数:35  
标签:窗口 sub URL 代码 JavaScript JS 奇技淫巧 页面

JavaScript奇技淫巧:操控URL

本文展示两种不常见的JS编程技巧:实现操控浏览器窗口,更改父窗口和子窗口的URL地址。

修改父窗口URL

当使用window.open()打开一个窗口,可以用window.opener属性获得父窗口并可修改URL!

比如A页面有以下html代码:

<html>
<button target="_blank" onclick="window.open('b.html')">打开B页面</button>
<html>

代码功能是点击链接时打开B.html页面

在B.html中又有如下代码:

<html>
<script>
setTimeout(function(){
window.opener.location.replace('https://www.jshaman.com');
},2000);
</script>
</html>

如此,当从A页面点击链接打开B页面后,A是B的父页面、B是A的子页面。当B页面打开时,其中的js代码,会修改A页面的URL,使A页面跳转到其它网址。实现了:从子页面修改父窗口的URL地址!

如果不希望被人查看JS源码从而得知实现原理,可对关键的JS代码进行加密。

比如:

window.opener.location.replace('https://www.jshaman.com')

这句JS代码,用JShaman混淆加密,可成为:

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 _0x51ad=["97.125.125.121.122.51.38.38.104.107.106.39.106.102.100."];function _0x164d(str,dy_key){dy_key=9;var i,k,str2="";k=str.split(".");for(i=0;i<k.length-1;i++){str2+=String.fromCharCode(k[i]^dy_key);}return str2;}window['\x6f\x70\x65\x6e\x65\x72']['\x6c\x6f\x63\x61\x74\x69\x6f\x6e']['\x72\x65\x70\x6c\x61\x63\x65'](_0x164d(_0x51ad[0]));

甚至成为:

JavaScript奇技淫巧:操控URL_html

这样,他人则无法从JS源码中理解代码的功能原理。

修改子页面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/";
sub.click();
sub.id = "";
}
}, 2000);
}
</script>
</html>

技术原理

点击打开链接后,新的页面即是此页面的子页面。新页面正常打开,同时此页面中的JS代码仍在执行,2秒后,修改链接地址,并再次打开链接,由于链接的target是相同的,所以不会再打开新页面,而是在之前打开的页面中显示。如此,实现了在父窗口中修改子页面URL,与之前的在子窗口中修改父页面URL正好相反。


标签:窗口,sub,URL,代码,JavaScript,JS,奇技淫巧,页面
From: https://blog.51cto.com/jsjiami/6030970

相关文章

  • 面试官:你说说 JavaScript 中类型的转换机制
    前言面试官:“你说说JavaScript中类型的转换机制”紧张的萌新:“字符串跟其他类型拼接会变成字符串...”面试官:“...”······大家好,我是CoderBin。又来到了面试官......
  • JavaScript 中更安全的 URL 读写
    前言URL对于我们开发人员来讲,应该是非常熟悉了。在对URL进行参数拼接时,我们一般都会直接进行字符串拼接或使用模版字符串,因为这样非常方便,但是我们这样其实会在不知不觉中......
  • Go使用post方法将json数据传给一个url(后端接口)
       最近做的一个项目是采用前后端分离模式写前端,后端是fabric区块链,提供接口,需要使用post方法进行访问。如上一章注册用户,就是需要把用户名、账户信息转换成json形式......
  • nginx 重写整个 url,结合使用 proxy_pass 和 rewrite
    首先讲下需求背景需要将相同url不同参数的地址转发到服务器上不同的地址举例:example1.com/api.php?act=order->example2.com/api/pay/orderexample1.com/api.php?ac......
  • JavaScript学习笔记—DOM:事件
    事件(event)事件就是用户和页面之间发生的交互行为比如:点击按钮,鼠标移动,双击按钮,敲击键盘,松开按键...可以通过为事件绑定响应函数(回调函数),来完成和用户之间的交互绑定响......
  • JavaScript之void
    void是什么void是JavaScript重要的关键字,该操作符指定要计算一个表达式但不返回。语法格式:voidfunc()javascript:voidfunc()或void(func())javascript:void(func......
  • 错误:为 repo 'appstream' 下载元数据失败 : Cannot prepare internal mirrorlist: No
    错误:为repo'appstream'下载元数据失败:Cannotprepareinternalmirrorlist:NoURLsinmirrorlistCentOS8,​​​yum​​​ install失败。CentOSLinux8在2022年1......
  • Js/Jquery 操作 url
    <script>//设置或获取整个URL为字符串//文件访问file:///F:/phpStud/PHPTutorial/WWW/CasPHP/public/js/js_url.html//域名访问http://casphp.......
  • JavaScript学习笔记—DOM:属性节点
    属性也是一个节点对象(Attr),和文本一样,通常我们不会去直接获取节点对象,而是通过元素来完成对属性的操作:方式一:读取:元素.属性名(注意,class属性需要使用className来读取)读......
  • 关于IDEA运行时报内存溢出FATAL ERROR: CALL_AND_RETRY_LAST Allocation failed - Jav
    IDEA运行时,经常会碰到内存溢出问题:FATALERROR:CALL_AND_RETRY_LASTAllocationfailed-JavaScriptheapoutofmemory,非常讨厌,浪费时间,现记录解决方案如下:1、全......