仅当我不通过 jQuery 附加它时才执行的脚本?

Posted

技术标签:

【中文标题】仅当我不通过 jQuery 附加它时才执行的脚本?【英文标题】:A script that is executed only if I don't append it by jQuery? 【发布时间】:2012-02-27 09:13:30 【问题描述】:

这是我的代码:

<script src="http://widgets.twimg.com/j/2/widget.js"></script><script>new TWTR.Widget(version: 2,type: "profile",rpp: 4,interval: 30000,width: 650,height: 202,theme: shell: background: "#7ee1fc",color: "#2e2e2e",tweets: background: "#ffffff",color: "#949494",links: "#009ece",features: scrollbar: true,loop: false,vlive: false,hashtags: true,timestamp: true,avatars: false,behavior: "all").render().setUser("microsoft").start();</script>

其中加载了一个 twitter 插件(但这实际上无关紧要)。好吧,现在,如果我将整个代码写在一个“字符串”中并通过 jQuery 附加它:

var myText='<script src="http://widgets.twimg.com/j/2/widget.js"><\/script><script>new TWTR.Widget(version: 2,type: "profile",rpp: 4,interval: 30000,width: 650,height: 202,theme: shell: background: "#7ee1fc",color: "#2e2e2e",tweets: background: "#ffffff",color: "#949494",links: "#009ece",features: scrollbar: true,loop: false,vlive: false,hashtags: true,timestamp: true,avatars: false,behavior: "all").render().setUser("microsoft").start();<\/script>'

$('#twitterContent').html(myText);

似乎它无法加载它(我收到一个错误,TWTR 未定义)。

那么为什么一个版本可以工作而另一个版本不行呢?我该如何解决这个问题?

附:如果你想要测试代码,this 是最重要的。

【问题讨论】:

&lt;\/script&gt; ?我认为您不需要在字符串中转义这些... jQuery: Can't append <script> element的可能重复 @elclanrs:这是必需的——否则浏览器的解析器会将其视为 &lt;script&gt; 标记的结尾...包含 javascript 代码的标记。 【参考方案1】:

jQuery 版本:

$.getScript("http://widgets.twimg.com/j/2/widget.js", function() 
new TWTR.Widget(id: 'twitterContent',version: 2,type: "profile",rpp: 4,interval: 30000,width: 650,height: 202,theme: shell: background: "#7ee1fc",color: "#2e2e2e",tweets: background: "#ffffff",color: "#949494",links: "#009ece",features: scrollbar: true,loop: false,vlive: false,hashtags: true,timestamp: true,avatars: false,behavior: "all").render().setUser("microsoft").start();
)​;

FIDDLE

【讨论】:

我编写的代码完全相同,但速度更快。恭喜! :) 我得到了这个奇怪的结果,你的 JSFiddle 经常出错attempt to run compile-and-go script on a cleared scope。这是想要的效果吗? @Marc 没那么烦人。去过那里,不止一次! 这将清除文档内容并将所有内容替换为 twitter 内容! @SalmanA - 这是一个 twitter 问题,所有这些小部件都需要传递一个 ID,否则它只会写入它内部的任何元素,在外部脚本中完成时将是文档。此外,将它包装在 window.onload 中或使用超时来延迟它会阻止它阻止网站加载,这通常是要走的路,因为这种社交媒体垃圾往往会使大多数网站的加载速度变慢。【参考方案2】:

我认为您需要另一种插入脚本元素的方法

var script = document.createElement( 'script' );
script.type = 'text/javascript';
script.src = url;
script.text = ".............";
$("#twitterContent").append( script );

【讨论】:

以上是关于仅当我不通过 jQuery 附加它时才执行的脚本?的主要内容,如果未能解决你的问题,请参考以下文章

仅当所有输入都有效时才执行代码

python 仅当.py文件作为脚本执行时才会执行该块。如果导入.py文件,则此部分不会被执行。好佛

python 仅当.py文件作为脚本执行时才会执行该块。如果导入.py文件,则此部分不会被执行。好佛

PHP - 仅当余数为 0 时才执行(和回显)操作 - 进入无限循环

jQuery 仅在附加了 jQuery 时才会触发 keyup 事件

仅当行不存在时才附加到 csv