背景:
使用原生 javascript ,写 jsonp 的可跨域请求逻辑,不间断发送心跳。
大失误:
由于心跳包是每秒发送一个 jsonp ,结果导致了头部插入了数不清的 script 标签。
需要做的:
- 清除标签
- 涉及的相应内存占用也要清除掉 ( 如何判断哪些是需要删除的?)
方案一:
设置唯一 id,以保证每次仅有一个 script 标签;
新增 timestamp , 以更新 url ;
结果:没用, 似乎必须要 “新增标签”,<script> 标签的 src 属性才会发起对起url的远程请求
需要做的:
- 了解浏览器解析标签的本质,<script> 标签中的 src 属性是如何加载资源的?
- 看看 jquery 是怎么处理 jsonp 的?
- 若这个 jsonp 请求返回的是 404 怎么办?
方案二:
每次都新增标签,但在 onload 时候,清除标签,代码如下:
var script = document.createElement('script');
var url = 'xxx';
script.setAttribute('src', url);
document.head.appendChild(script);
script.onload = function(ev){
var target = ev.target;
target.parentNode.removeChild(target);
}
网友评论