JS 根据来路域名跳转不同网址问题

2017-06-18 02:13:40 +08:00
 lancn
想用 js 实现根据不同来路域名( 2 个)跳转到不同网址
通过 123.comwww.123.com 的来路跳转到 111.com
通过 456.comwww.456.com 的来路跳转到 222.com
楼主美工,代码不太懂,不知道该怎样搞,求大神指点,万分感谢!
9578 次点击
所在节点    程序员
52 条回复
Chaidu
2017-06-19 15:54:43 +08:00
@EXDestroyer #34 # 35 #36 你说的这些都是你自己凭空相信出来的结果。你在没有测试我的代码的前提下直接拿凭空想象出来的结果来质疑我的代码,我也真是醉了。
@meepo3927 #37 首先感谢你分享代码(#17 说过不建议用正则。我想他说的“正则”也包括这种用字符串来匹配截取。)。
我一开始只是想帮助题主解决当前问题,写代码之前也把所有可能出现的情况和解决方案都想到了。之所以没贴出来这些非常复杂的代码,答案是没必要,方法给题主了,题主可以视自己的应用场景而定需不需要加一些限制条件(比如:之前的那两个域名都是自己的,自己跳转到自己的两个对应网址。等等很多情况下根本不需要杞人忧天。),然后很多人就非要杞人忧天。
说到这里很多人一定觉得我是一个做事不认真不严谨、写代码粗心大意、代码留坑留漏洞坑人,应该被老板扣工资炒鱿鱼的人。
其实,前面说了很多次了,我只是给题主一个解决方案,他再更具自己的使用场景来确定是否需要加各种限制。
举个栗子:你妈妈把饭做好,然后端到你的面前放好。然后你说,为什么不喂到嘴里?不是不喂你,而是不知道你是像自己吃呢,还是想让喂呢!如果喂你了,你会不会说为什么不让我自己吃呢?就像我在 #16 给出的代码,如果一开始就做了很多判断限制,题主可能觉得,我的使用场景不需要判断那些。从 123.com456.com 过来的网址都是正常的文章页的 url。
最后,自清一下,我写代码可是非常严禁的。就说这些吧。
Chaidu
2017-06-19 16:10:49 +08:00
@meepo3927 #39 记得 网易蜂巢 在 v2 推广时,被大家嘲笑官方示范的代码是截图的。现在看看咱们在 v2 讨论问题贴代码也是通过截图,真是讽刺。
@lancn 题主,v2 是程序员吹牛的论坛,逛 v2 是得不到任何营养的。问问题可以去 Stack Overflow 和 SegmentFault。远离 v2,你会发现新大陆。(我几个月不逛一次 v2 )。v2 站长是出了名的心胸狭窄,应该会封我号。
q409195961
2017-06-19 16:13:42 +08:00
6L 正解,让 NG 跳更直接
Chaidu
2017-06-19 16:24:35 +08:00
@q409195961 你是不了解题主的应用场景。我之前做过一个项目就必须用 js 来跳,从而避免搜索引擎跟踪 http 的状态。不过,我做的那个项目要复杂的多,先设置 Cookies,加上 url 带参数(这个参数很复杂,有多个加密算法加密不同用户特征拼接+时间戳(从服务器获取)加密后拼接。),第二个页面判断 Cookies 并解密 url 参数和判断时间差是否大于 x 秒(为了验证是否合法,防止伪造。)。
EXDestroyer
2017-06-19 17:31:33 +08:00
@Chaidu 我觉得很无语,楼上并没有人对你人身攻击你,真的不知道你为什么莫名这么激动...
Chaidu
2017-06-19 17:40:40 +08:00
@EXDestroyer 转移话题?
EXDestroyer
2017-06-19 17:53:57 +08:00
@Chaidu 这和转移话题没有任何关系,你的言论本来就有问题
另外你认为不需要考虑这类场景,别人认为需要考虑,这是观念问题,123.com 456.com 大家都明白只是一个假设
Chaidu
2017-06-19 18:04:01 +08:00
@EXDestroyer 请再看一遍我在 #41 第一行 对你的回复。
autoxbc
2017-06-19 19:54:45 +08:00
@Chaidu 您的方法不是最佳实践,我分析一下
1. 在 ['123.com','www.123.com'] , '111.com' 这个跳转规则中,三个域名是数据,跳转是操作。在多条规则中,数据和操作应该分离,就是一楼那种写法。#39 楼的代码也做了分离,就是这个意思。
2. 数据分离后,操作会被抽象,您的三种方案都没做抽象,存在冗余代码。
3. referring.indexOf('123.com') < 13 这里 13 是 Magic Number,会增加额外的维护成本。抽象度足够的话,并不需要魔数。同时,网站域名变更,魔数就是潜在的 bug,甚至是漏洞。
4. 对 url 字符串用 indexOf 或者 match(/new RegExp/) 匹配域名,并不总可以正确匹配,如果这是安全校验的一环,会造成跨域漏洞。给你个例子看看
http://zhchbin.github.io/2016/09/10/A-Valuable-XSS/
5. 前端处理 url 字符串的安全做法是一楼那样,给出一篇说明,其中客户端 URL 解析部分
http://web.jobbole.com/82459/
6. 如果略微放松浏览器兼容性的话,我们还会构造 URL 对象,这也是安全的。
new URL('http://www.test.com:8080/find?arg=str').hostname
// "www.test.com"
看这个教程,接口十分丰富,比手写好 5 倍。
https://developer.mozilla.org/zh-CN/docs/Web/API/URL
7. v2 是高水准程序员社区,我可能是这里最菜的一部分,但我愿意虚心向 v 友学习,希望您也可以。
Chaidu
2017-06-19 20:28:40 +08:00
@autoxbc #49 受教了,您是大神。
meepo3927
2017-06-20 08:34:12 +08:00
@w88975 window.location.host 拿的是当前 URL 的 host,需求是从来源判断,我理解就是从 referrer 中的域名来判断。
meepo3927
2017-06-20 08:37:49 +08:00
@autoxbc 大部分赞同,

补充一下就是 new URL 的 API 在 PC 端 IE 中不行( caniuse 可查),线上项目中应该是不考虑的。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/369234

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX