从Flash调用jQuery函数

我正在尝试使用动作脚本中的ExternalInterface.call()方法从flash调用外部JS函数。 该函数应该打开一个用jQuery编写的模态窗口。 我的问题有两个:

  1. 如何在不将操作附加到链接的情况下打开此模态窗口? 我只想打开窗口并传入URL。
  2. 有一个更好的方法吗?

(下面的代码 – 我只包括相关function。如果需要更多,请告诉我)

动作脚本:

import flash.external.ExternalInterface; function openMapWindowLink(thingName):Void { ExternalInterface.call("openMapWindow",locationURL); } 

jQuery的:

 // Add the action to a link (this works) function initAjaxPopups() { $('.ajax-popup').simpleLightbox({ closeLink:'a.btn-close, a.close-popup', faderOpacity: 0.7, faderBackground: '#000', href:true, onClick: null }); } // Open the lightbox from flash with url (not working correctly) function openMapWindow(locationURL) { //alert('Clicked '+locationURL); $simpleLightbox({ closeLink:'a.btn-close, a.close-popup', faderOpacity: 0.7, faderBackground: '#000', href:locationURL, onClick: null }); } /* ajax lightbox plugin */ jQuery.fn.simpleLightbox = function(_options){ var _options = jQuery.extend({ lightboxContentBlock: '.lightbox', faderOpacity: 0.8, faderBackground: '#ffffff', closeLink:'a.close-btn, a.cancel', href:true, onClick: null },_options); var _popupCounter = 1; return this.each(function(i, _this){ var _this = jQuery(_this); if (!_options.href) _this.lightboxContentBlock = _options.lightboxContentBlock; else _this.lightboxContentBlock = _this.attr('href'); if (_this.lightboxContentBlock != '' && _this.lightboxContentBlock.length > 1) { _this.faderOpacity = _options.faderOpacity; _this.faderBackground = _options.faderBackground; _this.closeLink = _options.closeLink; var _fader; var _lightbox = $(_this.lightboxContentBlock); if (!jQuery('div.lightbox-fader').length) _fader = $('body').append(''); _fader = jQuery('div.lightbox-fader'); _lightbox.css({ 'zIndex':999 }); _fader.css({ opacity:_this.faderOpacity, backgroundColor:_this.faderBackground, display:'none', position:'absolute', top:0, left:0, zIndex:998, textIndent: -9999 }).text(' '); _lightbox.shownFlag = false; _this.click(function(){ if (jQuery.isFunction(_options.onClick)) { _options.onClick.apply(_this); } var _popupURL = _this.attr('href'); if(jQuery('div[rel*="'+_popupURL+'"]').length == 0) { $.ajax({ url: _popupURL, global: false, type: "GET", dataType: "html", success: function(msg){ // append loaded popup _lightbox = $(msg); _lightbox.attr('rel',_popupURL).css({ zIndex:999, position:'absolute', display:'block', top: -9999, left: -9999 }); _lightbox.attr('id','ajaxpopup'+_popupCounter); jQuery('body').append(_lightbox); // init js for lightbox if(typeof initPopupJS == "function"){ initPopupJS(_lightbox); } _popupCounter++; // attach close event jQuery(_this.closeLink, _lightbox).click(function(){ _lightbox.fadeOut(400, function(){ _fader.fadeOut(300); _scroll = false; }); return false; }); // show lightbox _lightbox.hide(); _lightbox.shownFlag = true; jQuery.fn.simpleLightbox.positionLightbox(_lightbox); _fader.fadeIn(300, function(){ _lightbox.fadeIn(400); jQuery.fn.simpleLightbox.positionLightbox(_lightbox); if(typeof VSA_handleResize === 'function') { VSA_handleResize(); } }); }, error: function(msg){ alert('ajax error'); return false; } }); } else { _lightbox = jQuery('div[rel*="'+_popupURL+'"]'); _lightbox.hide(); _lightbox.shownFlag = true; jQuery.fn.simpleLightbox.positionLightbox(_lightbox); _fader.fadeIn(300, function(){ _lightbox.fadeIn(400); jQuery.fn.simpleLightbox.positionLightbox(_lightbox); if(typeof VSA_handleResize === 'function') { VSA_handleResize(); } }); } return false; }); jQuery(_this.closeLink).click(function(){ _lightbox.fadeOut(400, function(){ _fader.fadeOut(300); _scroll = false; }); return false; }); _fader.click(function(){ _lightbox.fadeOut(400, function(){ _fader.fadeOut(300); }); return false; }); var _scroll = false; jQuery.fn.simpleLightbox.positionLightbox = function (_lbox) { if(!_lbox.shownFlag) return false; var _height = 0; var _width = 0; var _minWidth = $('body > div:eq(0)').outerWidth(); if (window.innerHeight) { _height = window.innerHeight; _width = window.innerWidth; } else { _height = document.documentElement.clientHeight; _width = document.documentElement.clientWidth; } var _thisHeight = _lbox.outerHeight(); var _page = $('body'); if (_lbox.length) { if (_width  _page.innerHeight()) _fader.css('height',_height); else _fader.css('height',_page.innerHeight()); if (_height > _thisHeight) { if ($.browser.msie && $.browser.version  parseInt($(document).scrollTop())) { _fh = parseInt($(document).scrollTop()) _scroll = _fh; } else { _scroll = _fh - _thisHeight; } } _lbox.css({ position:'absolute', top: _scroll }); } if (_width > _lbox.outerWidth()) _lbox.css({left:((_width - _lbox.outerWidth()) / 2 + 10) + "px"}); else _lbox.css({position:'absolute',left: 0}); } } jQuery(window).resize(function(){ if (_lightbox.is(':visible')) jQuery.fn.simpleLightbox.positionLightbox(_lightbox); }); jQuery(window).scroll(function(){ if (_lightbox.is(':visible')) jQuery.fn.simpleLightbox.positionLightbox(_lightbox); }); jQuery.fn.simpleLightbox.positionLightbox(_lightbox); $(document).keydown(function (e) { if (!e) evt = window.event; if (e.keyCode == 27) { _lightbox.fadeOut(400, function(){ _fader.fadeOut(300); }); } }); } }); } 

如果将lightBox附加到不应该是链接的东西上

 $.simpleLightbox({...}) // with the "." after $ 

如果不起作用,您可以更改lightBox插件源,但如果您希望稍后更新到更新版本,这可能会很麻烦。

这是一个应该工作的解决方法:

  //on ready $('#dummylink').simpleLightbox({...}); function openMapWindow(locationURL) { $("#dummylink").attr("href", locationURL).trigger('click'); }