İframe Sorunsalı?

  1. KısayolKısayol reportŞikayet pmÖzel Mesaj
    rappermcs
    rappermcs's avatar
    Kayıt Tarihi: 04/Ekim/2002
    Erkek

    Selam arkadaşlar,

    ihtiyacım bir sunucu üzerinde 2 websitesi var ve birinden diğerini iframe ile çekmem ve login olmam gerekiyor. iframe içine koyduğum linkte kullanıcı adı, şifre ve submit butonu var. bunlar aynı domainde lakin farklı portlardan çalıştığı için iframe içindeki textboxlara vs lere erişim vermiyor. işin garip tarafı javascript ile kullanıcı adı textboxuna erişip value bilgisine değer set ediyorum lakin textboxun textine yazmıyor bu değeri. iframe ile çektiğim sitenin textboxlarını doldurup butonuna clickletmem lazım. bir yolu var mıdır?

    B nin içinde A yı göstereceğim lakin login sayfasını görmeyecek. B ye girdiğinde iframe içindeki A benim belirlediğim kullanıcı adı ve şifre ile login olacak.

    A) hasan.xyz.com/login.aspx

    B) ahmet.xyz.com/fiyat_listesi.aspx

     

     

    veyahut javascript jquery ajax ya da bilmediğim bir teknoloji ile B ye giren bir kullanıcı A ya post get ne bileyim bişeyle kullanıcı adı şifre gönderip buttona clickleteblir miyim?

     


    Paslanmış bir uygulama geliştirici.. #AnalistŞart
  2. KısayolKısayol reportŞikayet pmÖzel Mesaj
    pSkpt
    pSkpt's avatar
    Kayıt Tarihi: 10/Aralık/2010
    Erkek

    cross domain oluyor sanırım o ve izin verilmiyor öyle bir şeye.

    PHP, cURL ile post edebilirsin ama o da sunucu üzerinden olur kullanıcı üzerinden değil.

    http://madskristensen.net/post/Iframe-cross-domain-JavaScript-calls

    şöyle bir şey ama bu sanırım iframe içersindeki js'yi çağırmayla alakalı.

    pSkpt tarafından 21/Eyl/14 23:39 tarihinde düzenlenmiştir

    İmza...
  3. KısayolKısayol reportŞikayet pmÖzel Mesaj
    buzukatak
    buzukatak's avatar
    Kayıt Tarihi: 27/Haziran/2010
    Erkek

    @rappercms, iki siten de aynı alan adı (xyz.com) altında yayınlandığından her iki sayfada js ile document.domain = 'xyz.com' gibi bir tanımla Same Origin'i bildirdikten sonra birbirlerine erişebilirler.

    buzukatak tarafından 21/Eyl/14 23:46 tarihinde düzenlenmiştir

    anlıyorum.
  4. KısayolKısayol reportŞikayet pmÖzel Mesaj
    rappermcs
    rappermcs's avatar
    Kayıt Tarihi: 04/Ekim/2002
    Erkek
    buzukatak bunu yazdı

    @rappercms, iki siten de aynı alan adı (xyz.com) altında yayınlandığından her iki sayfada js ile document.domain = 'xyz.com' gibi bir tanımla Same Origin'i bildirdikten sonra birbirlerine erişebilirler.

    süper hocam yarın sabah iş yerinde ilk işim bunu denemek olacak..


    Paslanmış bir uygulama geliştirici.. #AnalistŞart
  5. KısayolKısayol reportŞikayet pmÖzel Mesaj
    rappermcs
    rappermcs's avatar
    Kayıt Tarihi: 04/Ekim/2002
    Erkek

    buzuk atak hocam dediğin gibi eklemeyle eriştim. lakin bu sefer de text i set etmekte sorun yaşıyorum. Aslında set ediyorum fakat textbox içerisinde göremiyorum.. manuel elle test yazdım okuyorum sonra üzerine yazıyorum fakat value değişmesine rağmen text değişmiyor.. bunun için ne yapabilirim?

     


    Paslanmış bir uygulama geliştirici.. #AnalistŞart
  6. KısayolKısayol reportŞikayet pmÖzel Mesaj
    S0KR4T3S
    S0KR4T3S's avatar
    Kayıt Tarihi: 31/Temmuz/2014
    Erkek

    benimde aklıma gelmişti bu ama sormamıştım bile olmaz diye, takipteyim, ama umut bu topraklardan çoktan gitti .)

    S0KR4T3S tarafından 22/Eyl/14 09:51 tarihinde düzenlenmiştir
  7. KısayolKısayol reportŞikayet pmÖzel Mesaj
    SinusX
    SinusX's avatar
    Kayıt Tarihi: 14/Aralık/2010
    Erkek

    şimdi cross site olduğu için direk erişimin bulunmuyor. bunun için karşılıklı mesajlaşman gerekiyor. 

    Bunun için oluşturduğun frame içerisindeki message listenera postMessage ile haber vermen gerekiyor. 

    <script>

                var win = document.getElementById("iframe").contentWindow;

                $('.clickme').on('click', function (e) {

                    e.preventDefault();

                    win.postMessage({ username: 'test', password: 'password' }, '*'); // * = mesaj origini 

                });        

    </script>

     

    Diğer taraftada bu mesajı alacak olan eventlistenerı ekliyoruz. 

     

         <script>

                function listener(event) {

                                  // event.data diğer taraftan yolladığımız { username: 'test', password: 'password' } objesini alıyor

                }

     

                if (window.addEventListener) {

                    addEventListener("message", listener, false)

                } else {

                    attachEvent("onmessage", listener)

                }

    </script>

     

    event.data ile yakaladığın obje ile frame içerisine taşıdığın datayı kullanabilirsin artık.

     

    farklı portlarda denemedim ama çalışması gerekiyor.

     

    SinusX tarafından 22/Eyl/14 11:33 tarihinde düzenlenmiştir

    Si vis pacem para bellum.
  8. KısayolKısayol reportŞikayet pmÖzel Mesaj
    SinusX
    SinusX's avatar
    Kayıt Tarihi: 14/Aralık/2010
    Erkek

    https://developer.mozilla.org/en-US/docs/Web/API/Window.postMessage

    şurda daha detaylı bilgi bulabilirsin bak


    Si vis pacem para bellum.
  9. KısayolKısayol reportŞikayet pmÖzel Mesaj
    rappermcs
    rappermcs's avatar
    Kayıt Tarihi: 04/Ekim/2002
    Erkek
    SinusX bunu yazdı

    şimdi cross site olduğu için direk erişimin bulunmuyor. bunun için karşılıklı mesajlaşman gerekiyor. 

    Bunun için oluşturduğun frame içerisindeki message listenera postMessage ile haber vermen gerekiyor. 

    //

                var win = document.getElementById("iframe").contentWindow;

                $('.clickme').on('click', function (e) {

                    e.preventDefault();

                    win.postMessage({ username: 'test', password: 'password' }, '*'); // * = mesaj origini 

                });        

    // ]]>

     

    Diğer taraftada bu mesajı alacak olan eventlistenerı ekliyoruz. 

     

          //

                function listener(event) {

                                  // event.data diğer taraftan yolladığımız { username: 'test', password: 'password' } objesini alıyor

                }

     

                if (window.addEventListener) {

                    addEventListener("message", listener, false)

                } else {

                    attachEvent("onmessage", listener)

                }

    // ]]>

     

    event.data ile yakaladığın obje ile frame içerisine taşıdığın datayı kullanabilirsin artık.

     

    farklı portlarda denemedim ama çalışması gerekiyor.

     

    sinux hocam hep aradığım açıklama buydu :) postmessage ı bir türlü uygulayammıştım gayet açıklayıcı olmuş. Diğer projeler için çok işime yarayacak.. Teşekkür ettim.

    buzukatak ın bahsettiği şekilde aynı domainde tanımlayıp aşağıdaki jquery koduyla gerekli değişimleri yapabildim. 

    var $currentIFrame = $("#FRAME");
    $currentIFrame.load(function () {
    $('#FRAME').contents().find('#txtUserName').val("kullanıcı adı");
    $('#FRAME').contents().find('#txtPassword').val("şifre");
    $('#FRAME').contents().find('#btnLogin').click();
    });


    Paslanmış bir uygulama geliştirici.. #AnalistŞart
Toplam Hit: 633 Toplam Mesaj: 9