通过嵌入客户端网站的Javascript显示JQuery和Fancybox的弹出窗口
Display a popup window with JQuery and Fancybox via Javascript embedded in client websites
我正在做一个web应用程序,计划允许客户端网站以以下方式在其页面上嵌入来自我的web应用程序的javascript:
<script src="http://example.org/showPopup.js"></script>
假设我的web应用程序位于http://example.org.
我不能假设客户端网站上的页面有JQuery和Fancybox。所以我需要在showPopup.js中加载JQuery和Fancybox
var serverName="localhost";
(function() {
var myScript = document.createElement('script');
myScript.type = 'text/javascript';
myScript.async = false;
myScript.src = 'http://' + serverName + '/lib/jquery/jquery-1.11.1.min.js';
(document.getElementsByTagName('head')[0] || document.getElementsByTagName('body'[0])).appendChild(myScript);
myScript = document.createElement('script');
myScript.type = 'text/javascript';
myScript.async = false;
myScript.src = 'http://' + serverName + '/lib/jquery.fancybox/source/jquery.fancybox.pack.js';
(document.getElementsByTagName('head')[0] || document.getElementsByTagName('body'[0])).appendChild(myScript);
var link = $('<a>');
link.css('display', 'none');
link.attr('href', 'http://example.org/mypage.html');
link.addClass('fancybox fancybox.iframe');
link.fancybox();
link.trigger('click');
})();
请注意,如果我在自己的应用程序页面上使用上面的代码,那么它是有效的。然而,我在一个客户端网站的页面上测试上述代码时遇到了这个错误。
var link = $('<a>');
ReferenceError: $ is not defined
我该怎么修?做这件事的正确方法是什么?
谢谢和问候。
---------------更新---------------
Qunice提供了工作代码。要使代码完全工作,必须加载fancybox-css。基于Quince的代码,我添加了CSS部分。它似乎在工作。如果有什么问题,请告诉我。
(function () {
var requestedJQuery = false;
var requestedFancyBoxJs = false;
var requestedFancyBoxCss = false;
function requestJQuery() {
var myScript = document.createElement('script');
myScript.type = 'text/javascript';
myScript.async = false;
myScript.src = 'http://cdnjs.cloudflare.com/ajax/libs/jquery/2.1.1/jquery.min.js';
(document.getElementsByTagName('head')[0] || document.getElementsByTagName('body' [0])).appendChild(myScript);
requestedJQuery = true;
}
function requestFancyboxJs() {
var myScript = document.createElement('script');
myScript.type = 'text/javascript';
myScript.async = false;
myScript.src = 'http://cdnjs.cloudflare.com/ajax/libs/fancybox/2.1.5/jquery.fancybox.pack.js';
(document.getElementsByTagName('head')[0] || document.getElementsByTagName('body' [0])).appendChild(myScript);
requestedFancyBoxJs = true;
}
function requestFancyboxCss() {
link = document.createElement( 'link' );
link.setAttribute( 'href', '//cdnjs.cloudflare.com/ajax/libs/fancybox/2.1.5/jquery.fancybox.css' );
link.setAttribute( 'rel', 'stylesheet' );
link.setAttribute( 'type', 'text/css' );
(document.getElementsByTagName('head')[0] || document.getElementsByTagName('body' [0])).appendChild(link);
requestedFancyBoxCss = true;
}
function checkDependancies() {
if (typeof $ === 'undefined' || typeof $.fancybox === 'undefined' || !requestedFancyBoxCss) {
if(!requestedJQuery && typeof $ === 'undefined') {
requestJQuery();
}
if(!requestedFancyBoxJs && (typeof $ === 'undefined' || typeof $.fancybox === 'undefined')) {
requestFancyboxJs();
}
if(!requestedFancyBoxCss) {
requestFancyboxCss();
}
setTimeout(function () {
checkDependancies();
}, 1);
} else {
displayFancyBox();
}
}
function displayFancyBox() {
var link = $('<a>');
link.css('display', 'none');
link.attr('href', 'http://jsfiddle.net/');
link.addClass('fancybox fancybox.iframe');
link.fancybox();
link.trigger('click');
}
checkDependancies();
})()
希望这能帮助其他人。
主要问题是在未定义$或fancybox时使用它会导致错误并导致脚本停止。
下一个问题是,脚本需要时间来下载和运行jQuery和fancybox,所以我建议对jQuery和fancybox进行测试,如果不存在,则在另一次测试之前添加timeOut。
您也可以使用一个标志,这样您就只能尝试获取丢失的脚本。
(function () {
var requestedJQuery = false;
var requestedFancyBox = false;
function requestJQuery() {
var myScript = document.createElement('script');
myScript.type = 'text/javascript';
myScript.async = false;
myScript.src = 'http://cdnjs.cloudflare.com/ajax/libs/jquery/2.1.1/jquery.min.js';
(document.getElementsByTagName('head')[0] || document.getElementsByTagName('body' [0])).appendChild(myScript);
requestedJQuery = true;
}
function requestFancybox() {
var myScript = document.createElement('script');
myScript.type = 'text/javascript';
myScript.async = false;
myScript.src = 'http://cdnjs.cloudflare.com/ajax/libs/fancybox/2.1.5/jquery.fancybox.pack.js';
(document.getElementsByTagName('head')[0] || document.getElementsByTagName('body' [0])).appendChild(myScript);
requestedFancyBox = true;
}
function checkDependancies() {
if (typeof $ === 'undefined' || typeof $.fancybox === 'undefined') {
console.log("no dependanices");
if(!requestedJQuery && typeof $ === 'undefined')
{
requestJQuery();
}
if(!requestedFancyBox && (typeof $ === 'undefined' || typeof $.fancybox === 'undefined'))
{
requestFancybox();
}
setTimeout(function () {
checkDependancies();
}, 1);
} else {
displayFancyBox();
}
}
function displayFancyBox() {
console.log("got dependanices");
var link = $('<a>');
link.css('display', 'none');
link.attr('href', 'http://jsfiddle.net/');
link.addClass('fancybox fancybox.iframe');
link.fancybox();
link.trigger('click');
}
checkDependancies();
})()
http://jsfiddle.net/leighking2/y9Lqtec9/
相关文章:
- jquery fancybox+angularJS:fancybox按钮动作问题
- jQuery fancybox multiple album
- 阻止jquery fancybox在单击链接时关闭
- 如何覆盖beforeShow块中的.href?(jquery/fancybox)
- 用于Soundcloud曲目的jQuery fancyBox
- Jquery Fancybox 如何添加额外的导航按钮
- jQuery FancyBox图片库中的推拉门效果
- Jquery Fancybox 可拖动的滚动条问题
- Jquery Fancybox 自动缩放无法按预期工作
- jQuery fancybox 在 IE7 中不起作用
- jquery Fancybox Parent被滚动到顶部
- JQuery & Fancybox 单击图像以打开新页面/链接(更新现有代码)
- jQuery Fancybox - 关闭ESC按钮不起作用
- Jquery Fancybox高度/向下滚动
- 在jquery fancybox中,ie 7没有显示ajax模式弹出窗口
- jQuery Fancybox 2.0.5语法错误
- JQuery FancyBox、Prepend函数和<a href>标签在IE7和IE8中不起作用.(其他浏
- jQuery fancybox卡在旋转加载程序上
- 修改Jquery. fancybox-1.3.4.js文件,重写_draw函数
- 在其他页面打开jQuery Fancybox