跨域加载和执行JS

时间:2012-01-17 14:32:26

标签: javascript

我正在使用javascript加载JS文件:

window.onload = function() {

         var fileref=document.createElement('script')
         fileref.setAttribute("type","text/javascript")
        fileref.setAttribute("src", "js/index.js")

        document.getElementsByTagName("head")[0].appendChild(fileref)

        }

index.js文件包含以下行

document.write('<a href="#" target="_blank">link</a>');

我确定文件加载(使用alert()测试)但由于某种原因,我的页面上找不到锚点。似乎没有任何js错误。

如果页面中包含的同一行直接正常工作

仅供参考:此JS适用于将跨域安装的插件。我知道可能存在限制,但会感谢任何指导。 谢谢

2 个答案:

答案 0 :(得分:3)

document.write实际上仅对与内联解析页面执行的脚本有用。如果您稍后致电document.write,则会隐式执行document.open,这会清除页面的内容。鉴于你所描述的内容,我不确定为什么你没有看到它。

在初始页面加载后添加内容时,使用DOM,例如:

var a = document.createElement('a');
a.innerHTML = "link";
a.href = "#";
a.target = "_blank";

document.body.appendChild(a); // Or, of course, append to something more targeted

在跨域加载脚本方面,根本没有问题。你正在做的很好,虽然你可以稍微缩短它,并且最好依赖于JavaScript的自动分号插入的恐怖:

var fileref = document.createElement('script');
fileref.src = "js/index.js";
document.documentElement.appendChild(fileref);

不需要type(JavaScript是默认值),src是反射属性(如type那样,如果你想继续使用它)。没有必要将脚本附加到head元素,文档元素(html)中的任何位置都可以。

答案 1 :(得分:1)

document.write不是你想要在这里使用的,因为它更适合于内联JS(HTML文档中的JS)。您是否可以使用.innerHTML将超链接写入DOM(确保要加载要修改innerHTML的元素)?

https://developer.mozilla.org/en/DOM/element.innerHTML