使用脚本标记将HTML注入DOM

时间:2011-12-01 20:40:55

标签: php javascript jquery dom

我们允许用户放置

<script language="javascript" src="oursite/script.php"></script>

标记在他们的页面上,然后应该将我们网站上的一些内容嵌入到他们的网站中。目前script.php包含document.write(“从数据库加载的一些内容”),但是有一些限制。

无论如何我可以使用jQuery实现相同的功能吗?我如何告诉jQuery将一段HTML代码完全放在脚本标签的哪个位置? document.write()可以做到这一点,但我不知道如何使用jquery做到这一点。 (我们已经通过script.php向客户端提供了jquery js代码。

2 个答案:

答案 0 :(得分:2)

您不需要jQuery来执行document.write()。只要它是内联执行的(即,不在诸如$(document).ready()的事件处理程序中),它就会起作用。只需确保转义结束脚本标记(如下所示:<\/script>),以便HTML解析器不会将其误认为是实际的结束脚本标记:

<script type="text/javascript">
    document.write("<script language=\"javascript\" " +
        "src=\"oursite/script.php\"><\/script>");
</script>

或者,您可以使用DOM操作添加脚本。如果要在加载页面后添加脚本,这是您唯一的选择。要在调用它的脚本标记之后定位它,请为脚本标记指定一个ID并使用$("#myScript").after("<script>")

<script type="text/javascript" id="myScript">
    $(function () {
        $("#myScript").after("<script>").attr({
            language: "javascript",
            src: "oursite/script.php"
        });
    });
</script>

答案 1 :(得分:0)

你不一定需要使用jQuery,但你可以。

这里的基本问题是在页面加载时找到脚本节点。

您可以给它一个id,并希望其他用户的页面上没有重复的ID。

但是如果您知道脚本将在页面加载时进行评估,您也可以这样做:

(function(){ // this is just so you don't run into name collisions with the user's page
// Get all script elements
var scripts = document.getElementsByTagName('script');
// we know the last script element will be *this* one
var script = scripts[scripts.length-1];
var newp = document.createElement('p');
newp.textContent = 'inserted paragraph';
// now insert our new nodes after the current script
script.parentNode.insertBefore(newp, script.nextSibling);
})();

你当然可以使用jQuery和var $script = $('script:last');,但如果你不需要它,你可以通过不使用它来节省一些加载时间。