0

現在のプロジェクトでは、コンテンツボックスの上に一連のタブがあり、それぞれがajaxスクリプトを実行して新しいコンテンツをコンテンツボックスにロードするホームページを作成しています。ただし、これらのページの一部にはSWFObjectで呼び出されるフラッシュオブジェクトが含まれており、ajaxスクリプトがページを呼び出すと、SWFObject javascriptが実行されず、フラッシュサポートなしのエラーメッセージが表示されます。

ビデオ通話ごとに関数を定義して(単一の関数を設計して変数を渡すだけでなく)、その関数をajax関数の一部として呼び出させようとしましたが、同じ結果が得られます。

これを解決する方法はありますか?私はSWFObject以外のものを使用することに反対していませんが、それが現在最良の解決策であると信じるように導かれています。すべての助けに心から感謝します。

4

3 に答える 3

1

編集:質問を誤解しました...もう一度答えさせてください:

問題は、コンテンツが返されたときにスクリプトがまったく実行されないことです。

ケース 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 は除外される可能性があります) では、オプションとして「スクリプトの実行」を許可しています...スクリプト タグを解析し、それらを eval(...) すると確信しています - これに対して強くお勧めしますが、うまくいきました過去の私。

于 2010-01-12T18:37:48.403 に答える
0

既に埋め込まれている swf で$('selectorofobject.load( )` リクエストを使用するだけです。[stringified JSON]swf オブジェクトをリロードする必要はありません。ロード方法があります。

于 2011-11-18T23:49:23.957 に答える
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 に答える