注入JQuery跨域

时间:2010-01-08 01:57:01

标签: javascript jquery cross-domain jsonp xss

使用JsonP注入JQuery的脚本是否安全?

我的网络应用程序的安装是 - 向客户的网站添加脚本(如谷歌分析)。我想在客户的网站上使用JQuery,作为我自己注入脚本的一部分。

我想知道,如果存在某种风险? 该应用程序需要支持任何类型的网站。

谢谢 亚龙

3 个答案:

答案 0 :(得分:4)

很难说你在库中做了什么,但似乎你正在构建某种类型的小部件,以便在多个站点上使用。

从@K Prime获得启发性评论之后,我已经更新了这个问题,这让我研究了如何在需要时包含两个jQuery副本:

如果您正在构建一个将在外部的网站上生成的窗口小部件,那么使用jQuery通常一般不好,并且将添加到“复制此嵌入代码并粘贴到您的网站“功能类型。 (当然jQuery小部件和插件比比皆是,但这些通常由开发人员选择和安装/实现,而不是通用的“copy-n-paste”小部件类型实现)

可能最大的原因(在实现可以在同一页面上运行两个jQuery副本之后)是文件大小增加。是否有必要取决于您的特殊需求和功能。简单的小部件=直JS。复杂的网站前端扩展,然后它可能值得文件大小增加。

要正确包含它(这样您就不会在其网站上遇到冲突),请按照如下所示的工作流程进行操作:

  1. 使用Google API动态地将jQuery添加到他们的页面,如此处的其他答案所述。
  2. 运行var mywidget_jQuery = $.noConflict( true );,这将恢复$ 的原始含义和恢复window.jQuery的原始含义。
  3. 动态添加您的脚本文件,但请确保将整个内容包装在一个自执行匿名函数中,如下所示:
  4. <强> JS

    (function($){
        ... Your code here ...
    })(mywidget_jQuery);
    

    现在,您可以安全地在特殊功能中使用$以及您想要的所有jQuery功能。

    额外功劳您可以在if语句中包含步骤1和2,以测试window.jQuery是否已定义,如果是,请测试jQuery.fn.version是否足够高以运行码。如果任一测试失败,则运行步骤1和2.但是,如果它通过,则只需运行var mywidget_jQuery = window.jQuery,这样您在步骤3中包含的脚本仍将运行。

答案 1 :(得分:2)

只需添加<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.3/jquery.js" />元素即可将jQuery添加到网站。

但是,如果他们使用其他$关键字,请务必致电jQuery.noConflict()

答案 2 :(得分:0)

如果您刚刚参考了库,为什么不直接链接到Google Code上托管的API?