Internet Explorer'ın Document Mode Ayarını Değiştirme

Delphi'de kod yazma ile ilgili sorularınızı bu foruma yazabilirsiniz.
Kullanıcı avatarı
Luffy
Üye
Mesajlar: 4
Kayıt: 03 Eki 2012 12:01

Internet Explorer'ın Document Mode Ayarını Değiştirme

Mesaj gönderen Luffy »

Merhaba arkadaşlar.
Bir sorunum var, forumda aradım ve bulamadım.
Projemde twebbrowser ile bir sayfa açtırıyorum ama sayfa IE10 veya IE11 ile uyumsuz.
Ama sayfayı normal ie ile açıp ardından da F12 tuşuna basıp geliştirici araçlarından belge modunu ie9 yaparsanız sayfa normal şekilde açılıyor.
Özetle benim belli bir sayfayı seçtiğim document mode'a göre açtırmam lazım. feature browser emulation ile ilgili yazanları denedim ama sonuç alamadım.
Kullanıcı avatarı
mrmarman
Üye
Mesajlar: 4741
Kayıt: 09 Ara 2003 08:13
Konum: İstanbul
İletişim:

Re: Internet Explorer'ın Document Mode Ayarını Değiştirme

Mesaj gönderen mrmarman »

Merhaba...

- Bir URL örneği vermediğinizden sadece fikrimi paylaşayım.

- TWebBrowser'in "user agent" içeriğini istediğiniz explorer versiyonuna göre günceller, sayfayı öyle çağırırsanız muhtemelen istediğiniz sonucu alırsınız. :idea:
Resim
Resim ....Resim
Kullanıcı avatarı
sadettinpolat
Moderator
Mesajlar: 2131
Kayıt: 07 Ara 2003 02:51
Konum: Ankara
İletişim:

Re: Internet Explorer'ın Document Mode Ayarını Değiştirme

Mesaj gönderen sadettinpolat »

benzer sorun bende de mevcut. internette ki cozum arayislarim pek olumlu sonuc vermedi.

web sayfasi yuklenirken meta taga su sekilde bir satir ekleyebilsem sorun cozulecek gibi ama html kod icerisine ancak sayfa yuklendikten sonra mudahale edebiiyorum.

<meta http-equiv="x-ua-compatible" content="IE=9">
"Sevmek, ne zaman vazgececegini bilmektir." dedi, bana.

---
http://sadettinpolat.blogspot.com/
Kullanıcı avatarı
mrmarman
Üye
Mesajlar: 4741
Kayıt: 09 Ara 2003 08:13
Konum: İstanbul
İletişim:

Re: Internet Explorer'ın Document Mode Ayarını Değiştirme

Mesaj gönderen mrmarman »

Merhaba...

http://whatsmyuseragent.com/ linki sizin o anki browser ile hangi USERAGENT kullandığınızı söylüyor. Buraya bakarak uygun olduğunu düşündüğünüz moda hangisi ise onun agent bilgisini not edin ve aşağıdaki verdiğim procedure'e uygulayın.

- Bir proje hazırladım inceleyin. Mesajımda bildirmek istediğim konuyu örnekliyor...

linkinden indirebilirsiniz. Projenin kaynak kodları da var, EXE'si de ...

Procedure aşağıdaki şekilde.

1. UserAgent
Resim

2. UserAgent
Resim

Procedure

Kod: Tümünü seç

Procedure NavigateEdilsin( WebBrowser:TWebBrowser; strURL, strUserAgent: String );
Var
  Headers  : OleVariant;
begin
  Headers := 'Content-type: application/x-www-form-urlencoded'#10#13
           + 'User-Agent: '+strUserAgent;
  WebBrowser.Navigate( strURL,
                       EmptyParam, EmptyParam, EmptyParam, Headers);
  While WebBrowser.ReadyState <> ReadyState_Complete do
  begin
    Sleep(1);
    Application.ProcessMessages;
  end;
end;
Kullanımı :

Kod: Tümünü seç

Var
  strUserAgent : String;
begin
  strUserAgent := 'Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.0; SLCC1; .NET CLR 2.0.50727; Media Center PC 5.0; .NET CLR 3.0.04506; .NET CLR 1.1.4322)';
  NavigateEdilsin( WebBrowser1, 'http://www.google.com.tr', strUserAgent );
end;
Resim
Resim ....Resim
Kullanıcı avatarı
mrmarman
Üye
Mesajlar: 4741
Kayıt: 09 Ara 2003 08:13
Konum: İstanbul
İletişim:

Re: Internet Explorer'ın Document Mode Ayarını Değiştirme

Mesaj gönderen mrmarman »

Bir ekleme:
- Bu yukarıda yazdığım da çözmezse, internet explorer'in mode değişikliği yaptığınızda Windows Registry'de oluşan değişim gözlemlenip, projeniz içerisinde müdahale gerekecek diyebiliriz. :idea:
Resim
Resim ....Resim
Kullanıcı avatarı
Luffy
Üye
Mesajlar: 4
Kayıt: 03 Eki 2012 12:01

Re: Internet Explorer'ın Document Mode Ayarını Değiştirme

Mesaj gönderen Luffy »

Hocam öncellikle cevap ve proje için teşekkürler.

Sorduğunuz sayfa sağlık bakanlığına ait kds performans sayfası, linki : https://kds.sagliknet.saglik.gov.tr/ana ... ?Dashboard (Sayfa genelde sorunlu, bir açılıyor yada açılmıyor.)

Bende sizin gibi düşündüm en başta, user agent string ile çözülebilir dedim ama pek sonuç alamadım.
Yaptıklarımı kısaca anlatayım : Internet Explorer'ın user agent string'ini değiştiren bir eklenti var UAPick isminde (http://www.enhanceie.com/ietoys/uapick.asp), onla söylediğiniz gibi agent stringi Firefox tarzında sayfayı açtırdım ama ne yazık ki tam olarak sayfaki buton clickleri çalışmıyor. Hatta firefox eklentisi olan user agent switcher'den (http://chrispederick.com/work/user-agent-switcher/) bir çok user agent stringi (http://techpatterns.com/forums/about304.html) buldum ve denedim sorun çözülmedi. User agent stringleri http://www.enhanceie.com/ua.aspx adresinden bakarakta doğruladım.

Sayfayı normal olarak ie'de açarsanız giriş bölümü sola kayıyor : http://i.imgur.com/51lJO0b.png
Firefox'ta veya IE'de user agent string kullandığımızda ise normal giriş ekranı geliyor : http://i.imgur.com/7epDKlX.png
Ama IE'de dediğim gibi user agent string değişikliklerinde click olayları işlemiyor. F12 geliştirici araçlarından belge modunu IE9'a değiştirmeden açılmıyor (http://i.imgur.com/JKjVwNg.png).

Verdiğiniz örneği henüz deneyemedim, çünkü sayfa çalışmıyor. Denediğimde sonucu buradan paylaşırım.

Bu arada son söylediğiniz olayı yani registrydeki değişikliği nasıl yakalayabiliriz ? O konuyu merak ettim açıkcası :)
Kullanıcı avatarı
mrmarman
Üye
Mesajlar: 4741
Kayıt: 09 Ara 2003 08:13
Konum: İstanbul
İletişim:

Re: Internet Explorer'ın Document Mode Ayarını Değiştirme

Mesaj gönderen mrmarman »

Merhaba...

- Sizin için Registry değişikliklerini test ettim, hakikaten sonuç alamadım. Halbuki MSDN'de açık seçik yazıyor olduğu halde.

- Ben de HTML yüklerken header kısmını modifiye ettim. Login işlemine olumsuzluğu olur mu bilmem, sizin login bilgileriyle dener burada sonucu paylaşırsınız.

- Çalışma sistemi basitçe şöyle... Tahmin edeceğiniz üzere WebBrowser'in OnNavigateComplete olayında HTML header kısmı alınıp istediğini kod başa ekleniyor sonra gerisin geriye WebBrowser'a basılıyor...

Kullanımı :

Kod: Tümünü seç

procedure TForm1.WebBrowser1NavigateComplete2(ASender: TObject;
  const pDisp: IDispatch; var URL: OleVariant);
Const
  strAra   = 'content="IE=100"';
  strDegis = 'content="IE=9"';
Var
  strIcerik : String;
begin
  if Assigned( pDisp ) then
  begin
    strIcerik := TWebBrowser(ASender).OleObject.Document.Head.InnerHTML; // Header Kısmını Aldık
    if Pos( strAra, strIcerik ) > 0 then
    begin
      strIcerik := StringReplace( strIcerik, strAra, strDegis, [] );
      TWebBrowser(ASender).OleObject.Document.Head.InnerHTML := strIcerik; // Son halini yayına verdik.
    end;
  end;
end;
Başarılar. :bravo:
Resim
Resim ....Resim
Kullanıcı avatarı
sadettinpolat
Moderator
Mesajlar: 2131
Kayıt: 07 Ara 2003 02:51
Konum: Ankara
İletişim:

Re: Internet Explorer'ın Document Mode Ayarını Değiştirme

Mesaj gönderen sadettinpolat »

cevap icin tesekkurler.

WebBrowser1NavigateComplete2 olayi iki kere tetikleniyor.

1. tetiklemede ilgili content ifadesi headerdan alınıp gerekli degisiklik yapilip tekrar headera set ediliyor.

Resim

Resim

ikinci tetiklenmeden sonra asagidaki javascript hatasini veriyor.

Resim

Bu hatayı verdikten sonrada kullanıcı adı ve parola yazdığımızda login olmuyor.

Aslında degisiklik biraz ise yaramis gibi duruyor. Login ekranı ortada cunku. Sonrasinda ise b_mozilla/browserdom.js icindeki kodlarda bir sikinti cikiyor. Contenti degistirmek tek basina yeterli olmuyor gibi. headerda browserdom.js dosyasina gore bir iki degisiklik daha yapmak gerekiyor gibi.

Biz simdilik problemi Delphi Chromium bilesenini kullanarak cozduk , ie ile ilgili calismalarimiz da devam ediyor. Daha efektif bir cozum bizim icin iyi olacak.
Ilginiz icin tekrardan tesekkurler.
"Sevmek, ne zaman vazgececegini bilmektir." dedi, bana.

---
http://sadettinpolat.blogspot.com/
Kullanıcı avatarı
mrmarman
Üye
Mesajlar: 4741
Kayıt: 09 Ara 2003 08:13
Konum: İstanbul
İletişim:

Re: Internet Explorer'ın Document Mode Ayarını Değiştirme

Mesaj gönderen mrmarman »

Merhaba...

- WebBrowser'ın Silent özelliğini TRUE yaptınız değil mi ? Aşağıdaki şekilde bir senaryo hazırladım.

// Global bir BOOLEAN değişken koyarak ikinci Navigate olayındaki değişimi kaldırdık...

Kod: Tümünü seç

var
  xboolBirinci : Boolean = False;
// Buton click olayında önce Silent özelliğini TRUE yapıyoruz, Boolean Global değişkeni FALSE yapıp ondan sonra navigate komutunu veriyoruz.

Kod: Tümünü seç

procedure TForm1.BitBtn1Click(Sender: TObject);
begin
  xboolBirinci := False;
  WebBrowser1.Silent := True;
  WebBrowser1.Navigate( Edit1.Text );
end;
// WebBrowser'in OnNavigateComplete2 eventinde bu BOOLEAN değişkeni devreye alıyoruz... iki defa çalışmasını engelliyoruz...

Kod: Tümünü seç

procedure TForm1.WebBrowser1NavigateComplete2(ASender: TObject;
  const pDisp: IDispatch; var URL: OleVariant);
Const
  strAra   = 'content="IE=100"';
  strDegis = 'content="IE=9"';
Var
  strIcerik : String;
begin
  if Assigned( pDisp ) AND (NOT xboolBirinci) then
  begin
    xboolBirinci := True; // ikinci defa değişikliği engelledik...
    strIcerik := TWebBrowser(ASender).OleObject.Document.Head.InnerHTML; // Header Kısmını Aldık
    if Pos( strAra, strIcerik ) > 0 then
    begin
      strIcerik := StringReplace( strIcerik, strAra, strDegis, [] );
      TWebBrowser(ASender).OleObject.Document.Head.InnerHTML := strIcerik; // Son halini yayına verdik.
    end;
  end;
end;
Bu durumda denedim, login işlemini devreye aldı ve sonunda kullanıcı parola hatası verdi. Yani sisem çalışıyor görünüryor. Kaynak kodlar bu mesajın ekinde...Bu projeyle deneyip sonucu bildirir misiniz...?
1.
Resim

2.
Resim
Dosya ekleri
WEB_Header_Mudahele.rar
WebBrowser Header müdahale ederek, IE-100 yerine IE-9 yaparak yayınlayan örnek (kaynak kodları ve çalışan exe dahildir)
(214.2 KiB) 296 kere indirildi
Resim
Resim ....Resim
Kullanıcı avatarı
sadettinpolat
Moderator
Mesajlar: 2131
Kayıt: 07 Ara 2003 02:51
Konum: Ankara
İletişim:

Re: Internet Explorer'ın Document Mode Ayarını Değiştirme

Mesaj gönderen sadettinpolat »

ornek icin tesekkurler. evet ornek ile denedigimde login islemi basarili oldu. sayfalaar acildi. ay , yil secimi yapilan comboboxlara tikladigimda ise combolarin icine yil ve aylarin dolmasi gerekirken lutfen bekleyiniz yazisi cikiyor ve oyleyece kaliyor. mevcut durumda yasadigimiz sorun bu combolarin dolmamasiydi. combolarin dolmadigi sayfanin kaynak koduna baktigimda <meta http-equiv="X-UA-Compatible" content="IE=100" > satirini gordum. sanirim bu sayfada tekrardan bolean degiskeni false olarak atamak problemi cozecek gibi.
"Sevmek, ne zaman vazgececegini bilmektir." dedi, bana.

---
http://sadettinpolat.blogspot.com/
Lord_Ares
Üye
Mesajlar: 1070
Kayıt: 15 Eki 2006 04:33
Konum: Çorlu

Re: Internet Explorer'ın Document Mode Ayarını Değiştirme

Mesaj gönderen Lord_Ares »

mrmarman hocam, örneğinizi inceleyerek http://www.beyzam.net/sohbet.php sayfasında sadece applet kısmını göstermeye çalıştım fakat acces violation hataları aldım. Nedenini çözemedim. Kodlamada head yerine body kısmını almaya çalıştım, sanırım burada hata yapıyorum.

Kod: Tümünü seç

procedure TForm1.WebBrowser1NavigateComplete2(ASender: TObject;
  const pDisp: IDispatch; var URL: OleVariant);

Var
  strIcerik : String;
begin
  if Assigned( pDisp ) AND (NOT xboolBirinci) then
  begin
    xboolBirinci := True; // ikinci defa değişikliği engelledik...
    strIcerik := TWebBrowser(ASender).OleObject.Document.Body.InnerHTML; // body kısmını al
    strIcerik := Memo1.Text;
    TWebBrowser(ASender).OleObject.Document.Body.InnerHTML := strIcerik; // Son halini yayına verdik.
  end;
  end;

Sayfanın body taqları arasındaki tüm divleri silerek tek bir div içinde applet kısmını aldım olmadı.

Kod: Tümünü seç


<div id="mainPage">

	<APPLET codeBase="http://irc.chattur.com/" height="495" archive="http://irc.chattur.com/esChat.jar" width="100%" code="esChat.class" name="esChat">
	
	<PARAM NAME="CABBASE" VALUE="http://irc.chattur.com/esChat.cab">
	<PARAM NAME="TimeStamps" VALUE="ON">
      <PARAM NAME="nickname" VALUE="">
      <PARAM NAME="password" VALUE="">
      <PARAM NAME="fullname" VALUE="">
      <PARAM NAME="Channel1" VALUE="#oxm,#yarisma,#oyun,#radyo,#ask,#islam,#test,#chattur,#beyzam,#sohbet">
      <PARAM NAME="Linkscroll" VALUE="false">
      <PARAM NAME="LinkName" VALUE="http://www.beyzam.net">
      <PARAM NAME="LinkAddress" VALUE="http://www.beyzam.net">
      <PARAM NAME="LanguageFile" VALUE="Turkish.txt">
      <PARAM NAME="KeySounds" VALUE="off">
      <PARAM NAME="TimeStamp" VALUE="On">
      <PARAM NAME="Port" VALUE="7000">
      <PARAM NAME="Encoding" VALUE="Cp1254">
      <PARAM NAME="Welcome" VALUE="irc.beyzam.net'a bağlanıyorsunuz.">
      <PARAM NAME="ident" VALUE="beyzam">
      <PARAM NAME="list" VALUE="true">
      <PARAM NAME="URL1" VALUE="beyzam.net:www.beyzam.net">
      <PARAM NAME="Sound1" VALUE="Huh:s1.au">
      <PARAM NAME="Sound2" VALUE="Gul:s2.au">
      <PARAM NAME="Sound3" VALUE="Anir:s15.au">
      <PARAM NAME="Sound4" VALUE="Meele:s4.au">
      <PARAM NAME="Sound5" VALUE="Kisne:s5.au">
      <PARAM NAME="Sound6" VALUE="Gul Agla:s6.au">
      <PARAM NAME="Sound7" VALUE="Ohyea:s7.au">
      <PARAM NAME="Sound8" VALUE="I love you:s8.au">
      <PARAM NAME="Sound9" VALUE="Esne:s9.au">
      <PARAM NAME="Sound10" VALUE="Islik:s14.au">
      <PARAM NAME="Sound11" VALUE="Esne2:s10.au">
      <PARAM NAME="menuSound1" VALUE="pop.au">
      <PARAM NAME="menuSound2" VALUE="empty.au">
      <PARAM NAME="menuSound3" VALUE="water.au">
      <PARAM NAME="menuSound4" VALUE="swing.au">
      <PARAM NAME="menuSound5" VALUE="clank.au">
      <PARAM NAME="menuSound6" VALUE="beep.au">
      <PARAM NAME="menuSound7" VALUE="nomatch.au">
      <PARAM NAME="menuSound8" VALUE="beeper.au">
      <PARAM NAME="menuSound9" VALUE="doorbell.au">
      <PARAM NAME="menuSound10" VALUE="trumpet.au">
      <PARAM NAME="menuSound11" VALUE="zzziuu.au">
      <PARAM NAME="menuSound12" VALUE="connection.au">
      <p>Browseriniz java desteklemiyor. <a href="http://www.java.com/tr/download/windows_xpi.jsp?locale=tr&host=www.java.com" target="_blank">Windows Xp kullanicilari chat programini açamiyorsaniz burayi tiklayarak gerekli programi yükleyip kurunuz.</a></p>
</APPLET>
         
    </div>

Kullanıcı avatarı
mrmarman
Üye
Mesajlar: 4741
Kayıt: 09 Ara 2003 08:13
Konum: İstanbul
İletişim:

Re: Internet Explorer'ın Document Mode Ayarını Değiştirme

Mesaj gönderen mrmarman »

Merhaba.

- Keşke size söylediğim gibi yapsaydınız.

- Bu siteyi navigate ettirmenize lüzum yok. Verdiğim code tagi içindekini bir HTML dosya yapın. Mesela sohbet.html olsun. Siz bu dosyayı Webbrowser ile navigate edin. :idea:
Resim
Resim ....Resim
eren2000
Üye
Mesajlar: 126
Kayıt: 26 Haz 2003 06:40
Konum: aksaray
İletişim:

Re: Internet Explorer'ın Document Mode Ayarını Değiştirme

Mesaj gönderen eren2000 »

ben de aynı sorunla boğuşuyorum bir çok alternatif denedim ama olmadı. Hocam Sorunu hallettiyseniz çözümü paylaşırsanız sevinirim. Bende de combobox bir makine de normal çalışırken diğerinde takılıp kalıyor. Lütfen bekleyiniz diyor. O makineler de ie11 var çalışan makineler de en fazla ie10 var. Registry ayarından tutun da muharrem hocamın çözümlerine kadar denedim ama olmadı. İnşallah sorunu çözmüşsünüzdür de bizimle burada paylaşırsınız. Hayırlı işler diliyorum.
eren2000
Üye
Mesajlar: 126
Kayıt: 26 Haz 2003 06:40
Konum: aksaray
İletişim:

Re: Internet Explorer'ın Document Mode Ayarını Değiştirme

Mesaj gönderen eren2000 »

Sorun ajax işlemlerinde programın takılıp kalmasıydı. Bir çok ie ayarı denedim burada yazılanları da denedim sorunun kaynağını buldum. Internet explorer 11 den kaynaklanıyor. Sorunun kaynağını (ie 11) sistemden kaldırıp daha eski (ie10 veya ie9) sürümü yükleyince ajax çalıştı. Böyle bir çözüm hoş değilse de kısa vadede işimi gördü. Ama ben programsal ya da ayarlarla ilgili olarak çözmeyi isterdim. İyi çalışmalar dileğiyle.
Lord_Ares
Üye
Mesajlar: 1070
Kayıt: 15 Eki 2006 04:33
Konum: Çorlu

Re: Internet Explorer'ın Document Mode Ayarını Değiştirme

Mesaj gönderen Lord_Ares »

Bu örneği inceleyerek bir çok sitede denedim ve çalıştı fakat instagram ana sayfasını açmak istediğimde işe yaramadı. Sebebini anlamış değilim sayfa açılıyormuş gibi scroolbar çubukları ekleniyor fakat sayfa bomboş :D Oysaki normal explorer 11 ile açılıyor.
Cevapla