Farklı sitelerden bilgi alış verişi ile ilgili - 1

Farklı sitelerden bilgi alış verişi ile ilgili

Problem

  1. Bizim iki okulumun web adresleri “mackosova.com” ve “ispkosova.com”.
  2. mackosova adresine bir sayfa ekledim, o sayfada iki iframe ve bir tablo var.
  3. iframe’in birinde mac’taki diğerinde isp’deki öğrenci sayısını gösteriyorum.
  4. her iki iframe de yüklendikten sonra asıl sayfadaki tabloya okulların toplam öğrenci sayılarını yazdıracağım.
Farklı sitelerden bilgi alış verişi ile ilgili - 1

Farklı sitelerden bilgi alış verişi ile ilgili – 1

Problem bu. Aslında çok kolay bir şeymiş diye düşünüyordum. Hemen javascript ile her sınıfın öğrenci sayılarını kopyalayayım dedim, document.getelementbyID kullandım. İframe’in biri çalıştı diğeri çalışmadı. Çalışmayan isp’den gelen ifremi idi ve hata olarak da güvenli hatası gözüküyordu. Google amcaya sorduğumda bunun çok normal olduğunu, javascript’in harici sitelere erişim yasağı olduğunu öğrendim. Yani mac’ın sitesinde çalıştırdığım javascript ile hiç bir şekilde isp’deki sayıları kopyalayamayacaktım.

Çözüm

Tüm interneti aradım taradım, birkaç farklı çözüm buldum ama beni tatmin etmemişti. En sonunda http://pipwerks.com/2008/11/30/iframes-and-cross-domain-security-part-2/ adresinde tam işime yarayan bir çözüm buldum. Şöyle bir çözüm bulmuş bay philips:

  1. A (benim problemimde mackosova.com) sitesinde olan bir anasayfa
  2. O anasayfadaki bir iframe B (yani ispkosova.com) sitesinde.
  3. Bu B sitesindeki sayfa yüklendiğinde kendi içinde bir başka iframe oluşturuyor ve oraya A sitesinden bir bir sayfa çağırıyor.
  4. İşte tüm kandırmacayı bu son çağırılan sayfa hallediyor, çünkü hem bu hem de anasayfamız aynı siteden olduğundan birbiriyle hatasız javascript iletişimi kurabiliyor.
Farklı sitelerden bilgi alış verişi ile ilgili - 2

Farklı sitelerden bilgi alış verişi ile ilgili – 2

İnşallah bir fikir oluşmaya başlamıştır, diyor burada yazarımız. Ben de oluşmuştu.

Son İşlemler

En son yüklenen sayfada sadece javascript ve asp kodları var, buradaki amacımız anasayfamızdaki bir javascript fonksiyonunu çalıştırmak.

Olaylarımın en son görüntüsü şöyle olacaktır:

  1. mac’taki anasayfa (default.asp) bir satıriçi tabloya isp’nin sitesinden bir sayfa (toplam.asp) yükler
  2. bu isp’deki sayfa yüklendiğinde kendi içinde bir satıriçi tablo açar ve içine mac’tan bir başka sayfa yükler.(islem.asp)
  3. bu islem.asp yüklenmeden önce bir querystring oluşturulur, içeriği ana sayfamızda gösterilen bilgilerden oluşan bir bilgidir bu. (islem.asp?okul=isp&ogrenci=234)
  4. islem.asp’nin içindeki kodlarla querystring incelenir ve anasayfamızdaki javascript fonksiyonuna bu bilgiyi gonderir.

Kodlar

Anasayfa (mackosova.com)

Burada ihtiyacımız olan sadece bir javascript fonksiyonu.

function islemYap(okul,ogrenci){
document.getElementById(okul).innerHTML=ogrenci;
}

toplam.asp (ispkosova.com)

aşağıdaki kodlarla toplam.asp kendi içinde bir iframe oluşturur. İframe’in içine mackosova.com adresindeki ilsem.asp’yi ve gerekli gördüğümüz querystringleri gönderecek

function setCompletion(result){
//iframe’in adı
var id = "proxyframe";
//daha önce "proxyframe" adında bir iframe var mı diya bakılır
var proxy = frames[id];
//sayfa adı querystring oluşturulur.
var url="http://mackosova.com/islem.asp?okul=isp&ogrenci="+toplamogrenci;
//iframe daha önceden varsa
if(proxy){
//adresi yenileniyor
proxy.location.href = url;
} else {
//yoksa oluşturuluyor
var iframe = document.createElement("iframe");
iframe.id = id;
iframe.name = id;
iframe.src = url;
iframe.style.display = "none";
document.body.appendChild(iframe);
}
}

islem.asp (mackosova.com)

ben asp ile işledim querystring komutlarını ama javascript ile de yapılabiliyor…

<%okul=request.querystring("okul")
ogrenci=request.querystring("ogrenci")%> 

Sonuç

Hem ISP’den hem de MAC’tan toplam sayıları aldım. Sonra da topladım.

mackosova.com ve ispkosova.com sitelerinden gelen bilgiler

mackosova.com ve ispkosova.com sitelerinden gelen bilgiler

Mükemmel. Şu anda yüzden fazla değişken gönderiyorum ve çok güzel çalışıyor.