1

私のjavascriptコードでは、iframeにjspページをロードし、次のような変数を渡します。

htmlData[i++]="<iframe id=\"mapframe\" frameborder=\"0\" style=\"width:330px;height:300px\" src=\"" + "mapURL.jsp" +"&lat=" + AjxStringUtil.urlComponentEncode("33.65") +"&lng=" + AjxStringUtil.urlComponentEncode("-84.42") +"&accord=" + AjxStringUtil.urlComponentEncode(accord) +"\"></iframe>";

次に、アクションの後にそのjspページをリロードする必要があり、これを行います。

accord = ui.newHeader.text(); document.getElementById('mapframe').contentWindow.location.reload();

「accord」変数が更新されないことを除いて、リロードは機能します。jspから呼び出すと、元の値のままです。iframe / jspをリロードするときに新しい値を渡すにはどうすればよいですか?

違いはないはずですが、私はjqueryを使用しており、これはYahoozimlet用です。

ありがとう。

4

1 に答える 1

2

「アコード」変数はどのように「更新」されますか?現時点では、最初に作成したのと同じURLをリロードしているだけです。JavaScriptaccord変数が変更され、それを反映するようにURLを変更する場合は、新しいURLを作成し、別のaccordパラメーターを使用してiframeを新しいページに移動する必要があります。

function encodeParameters(o) {
    var s= [];
    for (var k in o)
        if (o.hasOwnProperty(k))
            s.push(encodeURIComponent(k)+'='+encodeURIComponent(o[k]));
    return s.join('&');
}

var accord= ui.newHeader.text(); 
var url= 'mapURL.jsp?'+encodeParameters({
    lat: '33.65', lng: '-84.42', accord: accord
});
document.getElementById('mapframe').src= url;

contentWindowは歴史的にIE拡張であり、避ける方がよいでしょう。また、HTMLを貼り付けてiframeを作成する必要がある場合は、マークアップに含める前にURLをHTMLエスケープする必要があります。そうし&ないと、URLの文字が無効になり、HTMLエンティティ名と一致するパラメータ名をヒットしたときに問題が発生する可能性があります。

function encodeHTML(s) {
    return s.replace(/&/g, '&amp;').replace(/</g, '&lt;').replace(/"/g, '&quot;');
}

htmlData[i++]= '<iframe id="mapframe" src="'+encodeHTML(url)+'" frameborder="0" style="width:330px;height:300px"></iframe>';

(私は通常、明示的にHTMLエンコードする必要がないように、DOMメソッドを使用して要素を作成することを好みます。)

于 2010-04-28T19:12:38.523 に答える