0

对于我当前的项目,我正在处理一个主页,该主页在内容框上方有一系列选项卡,每个选项卡都执行 ajax 脚本以将新内容加载到内容框中。但是,其中一些页面包含一个用 SWFObject 调用的 flash 对象,当 ajax 脚本调用该页面时,SWFObject javascript 没有被执行,我得到了 no flash support 错误消息。

我尝试为每个视频通话定义一个函数(不只是设计一个函数并将变量传递给它)并将该函数作为 ajax 函数的一部分调用,但我得到了相同的结果。

任何想法如何解决这个问题?我不反对使用 SWFObject 以外的东西,尽管我一直相信它是目前最好的解决方案。真诚感谢所有帮助。

4

3 回答 3

1

编辑:我误解了这个问题......让我重新回答:

问题是当返回内容时脚本根本没有运行。

案例A:您可以控制页面内容/ javascript(听起来像)

一旦加载这些页面以开始执行您的 SWFObject 嵌入,您应该提供一种回调方法。

它可能看起来有点像这样(在带有 flash 的页面上)

function loaded()
{
    swfobject.embedSWF("myContent.swf", "flashContent", "300", "120", "9.0.0");
}

在 shell 页面上

//note the jquery dependency
$.post('url', function(data)
{
    $(myDiv).html(data);
    loaded();
});

案例 B:您无法控制这些页面...

一些图书馆(可能排除 jquery)允许“运行脚本”作为选项......我很确定他们解析出脚本标签并 eval(......)它们 - 我强烈建议不要这样做,但它适用于我过去。

于 2010-01-12T18:37:48.403 回答
0

好的,Skawful 的响应对我来说非常适合一个简单的页面,但是我在 Dynamic Drive 中使用的 Ajax 脚本让我对如何修改它并获得相同的功能感到困惑。我必须承认我更像是一个服务器端编码器而不是客户端,而 javascript 让我感到困惑。

var bustcachevar=1 //bust potential caching of external pages after initial request?(1=yes, 0=no)
var loadedobjects=""
var rootdomain="http://"+window.location.hostname
var bustcacheparameter=""

function ajaxpage(url, containerid){
    var page_request = false
    if (window.XMLHttpRequest) // if Mozilla, Safari etc
        page_request = new XMLHttpRequest()
    else if (window.ActiveXObject){ // if IE
        try {
            page_request = new ActiveXObject("Msxml2.XMLHTTP")
        } 
        catch (e){
            try{
                page_request = new ActiveXObject("Microsoft.XMLHTTP")
            }
        catch (e){}
        }
    }
    else
    return false
    page_request.onreadystatechange=function(){
    loadpage(page_request, containerid)
    }
    if (bustcachevar) //if bust caching of external page
    bustcacheparameter=(url.indexOf("?")!=-1)? "&"+new Date().getTime() : "?"+new Date().getTime()
    page_request.open('GET', url+bustcacheparameter, true)
    page_request.send(null)
}

function loadpage(page_request, containerid){
if (page_request.readyState == 4 && (page_request.status==200 || window.location.href.indexOf("http")==-1))
document.getElementById(containerid).innerHTML=page_request.responseText
}

function loadobjs(){
if (!document.getElementById)
return
for (i=0; i<arguments.length; i++){
var file=arguments[i]
var fileref=""
if (loadedobjects.indexOf(file)==-1){ //Check to see if this object has not already been added to page before proceeding
if (file.indexOf(".js")!=-1){ //If object is a js file
fileref=document.createElement('script')
fileref.setAttribute("type","text/javascript");
fileref.setAttribute("src", file);
}
else if (file.indexOf(".css")!=-1){ //If object is a css file
fileref=document.createElement("link")
fileref.setAttribute("rel", "stylesheet");
fileref.setAttribute("type", "text/css");
fileref.setAttribute("href", file);
}
}
if (fileref!=""){
document.getElementsByTagName("head").item(0).appendChild(fileref)
loadedobjects+=file+" " //Remember this object as being already added to page
}
}
}

这是ajax脚本。它在链接中称为

<a id="media" href="javascript:ajaxpage('media.asp','maincontent');" onclick="selector2010('media');">Media</a>

media.asp 上的函数是 loadFlash();

于 2010-01-13T17:02:12.103 回答
0

只需在已嵌入的 swf 上使用$('selectorofobject).load( [stringified JSON])` 请求。无需重新加载 swf 对象。有一种加载方法。

于 2011-11-18T23:49:23.957 回答