Выполнение SWFObject с перезагрузками Ajax - PullRequest
0 голосов
/ 12 января 2010

Для моего текущего проекта я работаю над домашней страницей, которая имеет ряд вкладок над блоком контента, каждый из которых выполняет сценарий ajax для загрузки нового контента в блок контента. Однако некоторые из этих страниц содержат флэш-объект, вызываемый SWFObject, и когда сценарий ajax вызывает страницу, javascript SWFObject не выполняется, и у меня остается сообщение об ошибке no flash support support.

Я попытался определить функцию для каждого видеовызова (не считая простого проектирования отдельной функции и передачи ей переменных) и заставить функцию вызываться как часть функции ajax, но у меня остались те же результаты.

Есть идеи, как это решить? Я не против использования чего-то другого, кроме SWFObject, хотя я был уверен, что это лучшее решение в настоящее время. Вся помощь искренне ценится.

Ответы [ 3 ]

1 голос
/ 12 января 2010

edit: я неправильно понял вопрос ... позвольте мне ответить:

Проблема в том, что когда возвращается содержимое, сценарии вообще не запускаются.

Дело A : Вы контролируете содержимое страниц / javascript (как это звучит)

Вы должны предоставить средство обратного вызова после загрузки этих страниц, чтобы начать выполнение ваших вложений SWFObject.

это может выглядеть примерно так (на странице со вспышкой)

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

и на странице оболочки

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

Случай B: Вы не можете контролировать эти страницы ...

Некоторые библиотеки (может быть исключен jquery) допускают «запуск сценариев» в качестве опции ... Я уверен, что они анализируют теги сценариев и оценивают их (...) - я настоятельно рекомендую против этого, но это работало на меня в прошлом.

0 голосов
/ 19 ноября 2011

просто используйте запрос $('selectorofobject). Load ([stringified JSON]) `для уже встроенного SWF. Нет необходимости перезагружать объект SWF. есть метод загрузки.

0 голосов
/ 13 января 2010

Хорошо, ответ Skawful отлично работает для меня с простой страницей, однако сценарий Ajax, который я использую в Dynamic Drive, вводит меня в заблуждение относительно того, как его изменить и получить те же функции. Я должен признать, что я больше серверный кодер, чем клиентский, и 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 ();

...