在一个div中写一个js脚本

Posted

技术标签:

【中文标题】在一个div中写一个js脚本【英文标题】:Write a js script in a div 【发布时间】:2015-09-14 02:43:06 【问题描述】:

我正在尝试使用 jQuery 从另一个网站获取脚本,然后 document.write

这是我的代码

var url = "https://code.jquery.com/jquery-1.10.2.js";
var dam = $.getScript(url);
document.write(dam);

但这不起作用! 我在页面上看到的都是[object Object]

如果没有 XHR,这可以实现吗?

jsfiddle

【问题讨论】:

为什么不使用 url 包含脚本?为什么要把它写到一个 div 中? 只是想知道是否有人可以做到这一点:),这对我来说真的很重要。 在向您的问题添加赏金之前,至少要完成使其成为真正问题的动作。没有人对你真正追求的东西有任何真正的想法。 (我的直觉是这是一个X-Y problem)。请清理您的问题。如需进一步参考,请参阅help center。 AFAIK $.getScript(url) 获取脚本并执行它,您将可以访问脚本中的变量,但不能访问源本身。 那么,@MahmoudGamal,你想做什么?你的问题不清楚。请详细说明。 【参考方案1】:

让它更容易......用我的小提琴

http://jsfiddle.net/wwwfzya7/1/

我使用 javascript 创建了一个 html 元素

var url = "https://code.jquery.com/jquery-1.10.2.js";

var script = document.createElement("SCRIPT"); //creates: <script></script>
script.src = url; //creates: <script src="long_jquery_url.js"></script>

document.body.appendChild(script); //adds the javascript-object/html-element to the page.!!!

【讨论】:

这将返回[object HTMLScriptElement] 那是因为你正在使用 DOCUMENT.WRITE() 使用 document.body.appendChild(script) 使用 document.body.appendChild(script); 时没有任何反应。我检查了你的小提琴,它也不能在那里工作! 尝试 document.head.appendChild(script) 或者 document.appendChild(script).. 但不要在 JSFiddle 内部执行。JSFiddle 有奇怪的限制,所以在本地单独执行文件,不在 JSFIddle 上。【参考方案2】:

不要使用document.write、it does not do what you think it does。它不做的是在文档末尾写入一些数据。它所做的而不是,是将数据通过管道传输到当前的写入流中。如果没有写入流,它将创建一个新流,重置文档的内容。所以调用 document.write(dam) 意味着你刚刚擦除了你的文档。 document.write 是早期 JavaScript 时代的一个低级 JS 函数,不要使用它

相反,你想使用现代的 DOM 操作函数,所以在 jQuery 中,就是这样的:

$(document.head).append($("<script>").attr("src", url));

在哪里

$("<script>")

构建一个新的脚本元素,

$(...).attr("src", url)

将“src”属性设置为您需要的属性,并且:

$(document.head).append(...)

$(document.body).append(...)

将脚本加载到您的文档中。如果是带有src 属性的纯脚本,它基本上可以去任何地方,如果是带有文本内容的脚本应该运行,则只能通过document.head 实现。

虽然如果它只是一个你需要加载并运行的脚本,你可以使用getScript,但是你不需要做任何其他事情,它只是:

var url = "https://code.jquery.com/jquery-1.10.2.js";
jQuery.getScript(url);

完成,jQuery 将加载脚本并执行它。什么都没有返回。

当然,您展示的代码是使用 jQuery 加载 jQuery,所以这有点奇怪。如果您只想在页面上加载 jQuery,显然您只需使用 HTML:

<!doctype html>
<html>
  <head>
    ...
  </head>
  <body>
    ...
    <script src="http://https://code.jquery.com/jquery-1.10.2.js"></script>
  </body>
</html>

在最后加载脚本,因此脚本加载不会阻塞您的页面。最后:为什么我们要加载 jQuery 版本 1.x 而不是 2.x? (如果你需要支持 IE8:微软甚至不再支持,所以你可能不需要)。

最后,如果我们不想加载脚本,但我们真的只想要它的内容,作为纯文本,*** 上已经只有一百万个答案告诉你如何做到这一点。使用 jQuery,那就是:

$.get("http://https://code.jquery.com/jquery-1.10.2.js", function(data) 
  $(document.body).append($("div").text(data));
);

但您已经知道这一点,因为在 *** 上已经被问过无数次,并且您记得在提问之前按照 how to ask 的说明搜索该网站,对吧?

【讨论】:

谢谢,但在页面上执行脚本不是我的目标!我想获取脚本内容并将其放在一个 div (USING JAVASCRIPT - NO XHR) 中,这可能吗? @MahmoudGamal 你如何在没有 XHR 的情况下在远程服务器上获取脚本? 如果需要获取文件内容,需要先获取文件,这需要设置XHR传输。想要使用“javascript,但没有 XHR”就像说你需要一辆可以快速行驶但没有***的汽车。您将需要 XHR,而 jQuery 获取文件内容的函数在幕后使用 XHR(答案已更新)【参考方案3】:

使用这种方式,它可以解决你的问题。

$.get( "https://code.jquery.com/jquery-1.10.2.js", function( data )   
  alert(data);
);

【讨论】:

这会发送一个 XMLHttpRequest ,而不是解决方案!!【参考方案4】:

你可以试试添加

<script src="http://code.jquery.com/jquery-1.8.3.min.js" ></script>

然后是 AJAX 调用,但它从 CACHE 中提取数据。它看起来像一个 AJAX,但是当添加 &lt;script&gt; 时,文件进入缓存,然后从 ajax 中的缓存中读取。如果它没有存储在缓存中,则使用普通 AJAX 读取它。

jQuery.cachedScript = function(url, options) 
    // Allow user to set any option except for dataType, cache, and url
    options = $.extend(options || , 
        dataType: "text",
        cache: true,
        url: url
    );
    // Use $.ajax() since it is more flexible than $.getScript
    // Return the jqXHR object so we can chain callbacks
    return jQuery.ajax(options);
;
$(document).on('ready', function() 
    // Usage
    $.cachedScript("http://code.jquery.com/jquery-1.8.3.min.js").done(function(script, textStatus) 
        console.log(script);
    );
);

正常解

如果您准备好使用 AJAX,请查看此fiddle

【讨论】:

【参考方案5】:

在页面上执行脚本不是我的目标!我想得到 脚本内容并将其放在一个 div (USING JAVASCRIPT - NO XHR) 中,是吗 可能吗?

尝试使用&lt;iframe&gt; 元素

<div>
  <iframe   src="https://code.jquery.com/jquery-1.10.2.js">
  </iframe>
</div>

jsfiddle http://jsfiddle.net/snygv469/3/

【讨论】:

【参考方案6】:

如何获取远程文件的内容并将其粘贴到您的文档中并执行 js 代码

我猜您希望将内容写入远程文件并希望将该内容写入您的 HTML。为此,您可以使用load() 函数。

要做到这一点,请按照以下步骤操作:

1.创建一个文件index.html,在里面写入如下代码:

 <pre id="remote_script"></pre>


 <script>

    $(document).ready(function() 
        //var url = "https://code.jquery.com/jquery-1.10.2.js";
        var url = "remote_script.html";/* For testing*/
        $('#remote_script').load(url,function()
            eval($('#remote_script').text()); /* to execute the code pasted in #remote_script*/
        );

    );
    </script>

2. 创建另一个文件remote_script.html 用于测试,在其中写入alert('a');,不带任何&lt;script&gt; 标签并运行上述代码。

【讨论】:

以上是关于在一个div中写一个js脚本的主要内容,如果未能解决你的问题,请参考以下文章

JS脚本如何实现DIV的移动

使用 Python/GAE 动态生成 HTML div/JS 脚本

JS 脚本不适用于使用 jQuery 的 .load() 加载的 div

js实现点击显示一个div,点击其他任何地方div消失,如何实现

如何在 django 中将静态添加到我的脚本中

为啥在html的script标签中写如下代码可以实现javascript脚本的异步加载?