2015-11-17 16 views
6

Utworzyłem karty JQuery i osadziłem stronę JSP na stronie nadrzędnej. Wywołałem zdarzenia zmiany rozmiaru okna na obu stronach. Ale funkcja strony wewnętrznej nie jest wywoływana.Na zdarzeniu zmiany rozmiaru okna javascript na obiekcie znacznik

Dla strony wewnętrznej mam element SVG, który należy zmienić za każdym razem, gdy zmienia się rozmiar okna.

sLinkPageToJunction = '<%=base1%>' + "/InnerTabbedPage.jsp?IntersectionName=" + strIntersectionName + "&FrameName=" + strFrameName + "&ip=" + '<%=ServerIP %>' + "&port=" + '<%=ServerPORT %>' + "&InterCorridorName=" + svgfilename; 
if (document.getElementById("JnLive" + strIntersectionName) == null) { 
    //var nextTab = $('#tabs li').size()+1; 
    Tabcount = $('#tabs li').size(); 
    // create the tab 
    $('<li><a href="#tab' + strIntersectionName + '" data-toggle="tab">' + strIntersectionName + '&nbsp;&nbsp; <button class="close closeTab" align="right" "type="button">x</button></a></li>').appendTo('#tabs'); 

    // create the tab content 

    $('<div class="tab-pane" id="tab' + strIntersectionName + '"> <div id="JnLive' + strIntersectionName + '" class="col-sm-6" style="margin-top: 1%"> </div>').appendTo('.tab-content'); 


    var heightvalue = $(window).height(); 
    var widthvalue = $(window).width() 

    //alert("---->"+heightvalue+"---->"+widthvalue); 

    var url = "<object id=obj'" + strIntersectionName + "' data='" + sLinkPageToJunction + "' height='" + heightvalue + "' width='" + widthvalue + "'></object>"; 

    $("#JnLive" + strIntersectionName).html(url); 

    // make the new tab active 
    $('#tabs a:last').tab('show'); 
    OpenedTabbedJunctionNames[Tabcount - 1] = strIntersectionName; 
    OpenedTabbedJunctionFrameNames[Tabcount - 1] = strFrameName; 

    registerCloseEvent(); 
} 

Tworzy nową kartę, jeśli jeszcze nie istnieje.

Teraz moja na windowresize wydarzenie na stronie wewnętrznej jest

window.addEventListener('resize', changeframesizeJN) ; 

na stronie zewnętrznej jest

window.addEventListener('resize', changeframesize) ; 

Ale kiedy zmiany rozmiaru okna w zakładce wybranego changeframesizeJN nie jest wywoływany.

Jak mogę to zrobić?

P.S: Nie wiem, czy umieściłem informacje wymagane do udzielenia odpowiedzi na pytanie. Faktem jest, że nie jestem pewien, jak zadać to pytanie.

+0

dodać http://jsfiddle.net/ odtworzyć, jeśli możesz (lub fragment kodu) – Blag

+0

Jeśli dokument wewnątrz ' 'element jest w tej samej domenie, możesz uzyskać dostęp do jego documentElement z okna nadrzędnego za pomocą' object.contentDocument', który pozwala na bezpośrednie przejście do modyfikacji, które chcesz wykonać. – Kaiido

+0

@Blag, nie byłem w stanie odtworzyć jsfiddle. Z pewnością bym to zrobił, gdybym mógł. To jeden z powodów PS. – Tattu

Odpowiedz

1

Dajesz panelowi stałą szerokość i wysokość z tego, co mogę powiedzieć ze swojego kodu. Powinieneś zmienić CSS swojej wewnętrznej strony, aby zmienić rozmiar z jej rodzicem.

Alternatywnie można wywołać funkcję strony wewnętrznej przy zmianie rozmiaru jej zewnętrznego rodzica, jak również jego własnej. Od tej samej domeny nie będziesz mieć żadnego problemu:

window.addEventListener('resize', function() { 
    changeframesize(); 
    window.frames['yourIframeName'].changeframesizeJN(); 
}); 

Tylko upewnij się, że nadałeś wewnętrznemu oknu nazwę, dzięki czemu możesz ją wybrać. Lub użyj To wskaźnik, ale polecam użycie nazwy, aby go czytelny:

window.frames[0].changeframesizeJN(); 
+0

Dzięki, kolego, dokładnie tego chciałem. Używam indeksu ramek, ale z powodu innych ograniczeń. Chociaż nie dałem żadnej szerokości Paneli. Panel startowy. Więc panel reagował. Jedyną rzeczą był tag SVG na wewnętrznej stronie. Tak więc document.get nie dał mi tego, abym mógł zmienić rozmiar SVG. – Tattu

0

spróbuj dodać Resize na znacznika object, jak:

var url = "<object id=obj'" + strIntersectionName + "' onresize='changeframesizeJN()' data='" + sLinkPageToJunction + "' height='" + heightvalue + "' width='" + widthvalue + "'></object>"; 

Jeśli to działa to można powiązać go do obiektu, tak samo jak okna, z wyjątkiem elementu obiektu zamiast.

objectElement.addEventListener('resize', changeframesizeJN) ; 
+0

Dzięki, ale obiekt nie działa. window.frames załatwił mi sprawę. – Tattu

Powiązane problemy