javascript - 如何在知乎添加跨域 src 的 <script>?
迷茫
迷茫 2017-04-10 14:25:51
[JavaScript讨论组]

在知乎的问题

javascript:(function(d){var n=d.getElementsByTagName("head")[0].getElementsByTagName("script").length;var s=d.createElement("script");d.getElementsByTagName("head")[0].appendChild(s);d.getElementsByTagName("script")[n].src="http://www.joyneop.com/blog/js/func.js";})(document)

这样也不行

迷茫
迷茫

业精于勤,荒于嬉;行成于思,毁于随。

全部回复(1)
阿神

实现方法

可以用 XHR 跨域获取 JS 内容之后填充到 <script/> 标签内实现,此方法需要你的 JS 文件所在主机先开启 CORS(跨域资源共享,允许白名单中的源页面通过Ajax方式获取本站资源),然后就可以用这段代码跨域注入你的JS了:

javascript:(function(d){var s=d.createElement("script");d.getElementsByTagName("head")[0].appendChild(s);var xhr = new XMLHttpRequest(); xhr.open('GET', 'http://www.joyneop.com/blog/js/func.js', true);xhr.onload = function(){s.innerHTML = xhr.responseText};xhr.send();})(document)

CORS 的设置方法是在服务器端在JS文件的响应头中添加:

Access-Control-Allow-Origin: http://zhihu.com

测试

在你配置好 CORS 之前,上述代码目前还无法生效。测试的话可以用下面这段(html5rocks的所有资源都是允许跨域的):

javascript:(function(d){var s=d.createElement("script");d.getElementsByTagName("head")[0].appendChild(s);var xhr = new XMLHttpRequest(); xhr.open('GET', 'http://www.html5rocks.com/static/js/modernizr.custom.82437.js', true);xhr.onload = function(){s.innerHTML = xhr.responseText};xhr.send();})(document)

以上代码从 html5rocks.com 中获取 Modernizr 代码并注入页面。
执行之前 Modernizr 版本为 2.6.2,执行之后是 2.6.1 了(哎哟SF对图片压缩得真凶残):

热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习
PHP中文网抖音号
发现有趣的

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号