我正在开发的项目需要在客户的Web页面上使用jQuery.客户将插入我们将提供的一大块代码,其中包括一些<script>在<script>-created 中构建窗口小部件的元素<iframe>.如果他们还没有使用最新版本的jQuery,那么这也将包括(最有可能)<script>Google的托管版jQuery.
问题是一些客户可能已经安装了旧版本的jQuery.虽然这可能有用,如果它至少是一个相当新的版本,我们的代码确实依赖于jQuery库中最近引入的一些功能,所以当客户的jQuery版本太旧时必然存在实例.我们不能要求他们升级到最新版本的jQuery.
是否有任何方法可以加载更新版本的jQuery,仅在我们的代码上下文中使用,不会干扰或影响客户页面上的任何代码?理想情况下,也许我们可以检查jQuery的存在,检测版本,如果它太旧,那么以某种方式加载最新版本只是用于我们的代码.
我有想法<iframe>在客户的域中加载jQuery ,也包括我们的<script>,这似乎可能是可行的,但我希望有更优雅的方式来做到这一点(更不用说没有性能和复杂性的惩罚了额外的<iframe>s).
我读了教程: http://drnicwilliams.com/2006/11/21/diy-widgets/由Nic博士为XSS Widgets提供.
我正在寻找一种将参数传递给脚本标签的方法.例如,要进行以下工作:
<script src="http://path/to/widget.js?param_a=1&param_b=3"></script>
Run Code Online (Sandbox Code Playgroud)
有没有办法做到这一点?
更新:两个有趣的链接:
我已经构建了一个JavaScript小部件,必须可以在任何环境中的任何第三方网站上嵌入.该小部件依赖于jQuery和jQuery UI.我按照如何将依赖于jQuery的Javascript小部件嵌入到未知环境中的步骤以负责任的方式添加jQuery - 非常适合嵌入jQuery.但是当我尝试添加jQuery UI时,它失败了.这是代码:
(function(window, document, version, callback) {
var j, d;
var loaded = false;
if (!(j = window.jQuery) || version > j.fn.jquery || callback(j, loaded)) {
var script = document.createElement("script");
script.type = "text/javascript";
script.src = "https://ajax.googleapis.com/ajax/libs/jquery/1.4.4/jquery.min.js";
script.onload = script.onreadystatechange = function() {
if (!loaded && (!(d = this.readyState) || d == "loaded" || d == "complete")) {
callback((j = window.jQuery).noConflict(1), loaded = true);
j(script).remove();
}
};
document.documentElement.childNodes[0].appendChild(script)
}
})(window, document, "1.3.2", function($, jquery_loaded) {
$.getScript('http://ajax.googleapis.com/ajax/libs/jqueryui/1.8/jquery-ui.js', …Run Code Online (Sandbox Code Playgroud) javascript ×3
jquery ×2
iframe ×1
jquery-ui ×1
loading ×1
parameters ×1
script-tag ×1
widget ×1
xss ×1