网站使用 rel="noopener" 打开外部锚
2024-08-27 05:21:21
当您的页面链接至使用 target="_blank" 的另一个页面时,新页面将与您的页面在同一个进程上运行。 如果新页面正在执行开销极大的 JavaScript,您的页面性能可能会受影响。
此外,target="_blank" 也是一个安全漏洞。新的页面可以通过 window.opener 访问您的窗口对象,并且它可以使用 window.opener.location = newURL 将您的页面导航至不同的网址。
单击下面的一个链接,打开一个需要大量JavaScript计算的页面(以下并非链接,请参见原文——译者注):
<a target="_blank">
<a target="_blank" rel="noopener">
没有rel="noopener",随机数会被新打开页面中的JavaScript阻断。不仅如此,所有主线程活动也会被阻塞,试试选择页面中的文本。但加了rel="noopener"之后,随机数生成一直保持在60fps。当然,是在Chrome或Opera中。
大多数浏览器都是多进程的,除了Firefox(他们正在改)。每个进程包含多个线程,包括我们常说的“主”线程。解析、样式计算、布局、绘制和非worker的JavaScript都在主线程里执行。就是说,一个域中的JavaScript与另一个标签页或窗口中的域中的JavaScript在不同的线程里。
然而,由于我们可以通过window.opener同步跨窗口地访问DOM,因此通过target="_blank"启动的窗口还在同一个进程(线程)中。通过window.open打开的iframe和窗口也一样。
rel="noopener"会阻止window.opener,因此不存在跨窗口访问。Chromium浏览器为此做过优化,会在独立的进程中打开新页面。
REFs
最新文章
- salesforce 零基础学习(十八)WorkFlow介绍及用法
- ComboBoxEdit设置选项值(单选 多选)
- 解猜数字(XAXB)
- jquery若干问题
- 新手教程之使用Xib自定义UITableViewCell
- ubuntu13.04下载android4.0.1源码过程
- 用const取代宏定义更好的管理内存
- RR 插入不影响
- 走进C++程序世界------继承和派生
- HashMap,LinkedHashMap,TreeMap的区别(转)
- DataGridView很详细的用法
- SQLCODE=-668, SQLSTATE=57016, SQLERRMC=7
- Mesos源码分析(16): mesos-docker-executor的运行
- node.js api文档生成
- Docker下安装Influxdb-1.6.1和Grafana5.2.2
- 项目:《JavaWeb图书管理系统视频》--代码修复还可以运行起来
- [lightoj P1306] Solutions to an Equation
- Golang 数组、切片、映射
- [转]Git忽略提交规则 - .gitignore配置运维总结
- L2-017. 人以群分
热门文章
- PAT 1082 Read Number in Chinese[难]
- java 的==和equals的区别(二)
- 转载Liferay PortletPreference store()方法研究
- SEO笔记:Anatomy of a URL
- hdu5021 树状数组+二分
- 学号20155308 2016-2017-2 《Java程序设计》第7周学习总结
- Gulp命令自动生成精灵图
- Java之网络爬虫WebCollector2.1.2+selenium2.44+phantomjs2.1.1
- 20145315 《Java程序设计》第六周学习总结
- noip2017普及 兔纸游玩记