SORU
11 Aralık 2009, Cuma


"inkar" Erişim; Program aracılığıyla oluşturulan < bir belge nesnesi erişmeye çalışırken JavaScript hata;iframe&; (YANİ sadece)gt

Hangi <iframe> oluşturmak için ihtiyacım var projem var; öğesi kullanarak JavaScript ve DOM eklemek. Bundan sonra, < biraz içerik eklemek istiyorum;iframe>. Üçüncü taraf Web sitelerine gömülü olacak bir widget.

Bilmiyorum set "src" öznitelik <iframe> beri istemiyorum yük bir sayfa, daha ziyade, kullanılan izole/kum içeriği ben Ekle içine kadar bilmiyorum çalışma içine CSS veya JavaScript çakışmaları ile ana sayfa. JSONP bir sunucudan bazı HTML içeriği yükleme ve bu <iframe> eklemek için kullanıyorum;.

Bu iyi çalışıyor, çok ciddi bir durum - belge varsa.etki alanı özelliği ayarlanmış Ana Sayfa (hangi olabilir bazı ortamlarda bu widget konuşlandırılmış), Internet Explorer (muhtemelen tüm sürümleri, ama ben teyit 6, 7, 8) verir bana, bir "Erişim engellendi" hata yapmaya çalıştığınızda erişim belge nesne bu <iframe> ettim yarattı. Test ettim herhangi bir diğer tarayıcılar (tüm büyük, modern olanlar) olmuyor.

Bu Internet Explorer belgeyi ayarlamak için gerektirir farkında olduğum için biraz mantıklı.tüm windows etki alanı aynı değere birbirleriyle iletişim kuracağı Kare/. Ancak erişemiyorum bir belge üzerinde bu değeri ayarlamak için herhangi bir şekilde farkında değilim.

Herkes bunu bir şekilde belge koymak için bir fırsat olarak farkındadır.dinamik olarak oluşturulan bu < etki alanı özellik;iframe>? Ya da doğru açıdan de - başka bir yolu tercih ediyorum, bu sorun içine çekmeden elde etmektir arıyor değilim? &Lt kullanmak istiyorum;iframe> izole/korumalı pencere gibi herhangi bir durumda, bu widget işlevselliği için çok önemlidir.

İşte benim test kodu:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
  <head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
    <title>Document.domain Test</title>
    <script type="text/javascript">
      document.domain = 'onespot.com'; // set the page's document.domain
    </script>
  </head>
  <body>
    <p>This is a paragraph above the <iframe>.</p>
    <div id="placeholder"></div>
    <p>This is a paragraph below the <iframe>.</p>
    <script type="text/javascript">
      var iframe = document.createElement('iframe'), doc; // create <iframe> element
      document.getElementById('placeholder').appendChild(iframe); // append <iframe> element to the placeholder element
      setTimeout(function() { // set a timeout to give browsers a chance to recognize the <iframe>
        doc = iframe.contentWindow || iframe.contentDocument; // get a handle on the <iframe> document
        alert(doc);
        if (doc.document) { // HEREIN LIES THE PROBLEM
          doc = doc.document;
        }
        doc.body.innerHTML = '<h1>Hello!</h1>'; // add an element
      }, 10);
    </script>
  </body>
</html>

Bir de ev sahipliği yaptım:

http://troy.onespot.com/static/access_denied.html

Gördüğünüz gibi Eğer yük bu sayfada YANİ, istediğim, çağrı uyarısı(), bir kolu pencere nesnenin <iframe>; ben sadece alamıyoruz daha derin, içine belge nesnesini.

Çok herhangi bir yardım veya öneriler için teşekkürler! Kim bana bunun için bir çözüm bulmanıza yardımcı olabilir borçlu olacağım.

CEVAP
11 Aralık 2009, Cuma


belge.etki alanı özelliği, Ana Sayfa, Internet Explorer bana veriyor "Erişim engellendi"

İç çekiş. Sorun (bug? YANİ evet, bir zor tatsızlık bu tür belgelenmiş standart no) olduğu gibi söylemek. Srcless bir iframe oluşturmak document.domain ana belge location.host document.domain onun yerine alır. Bu noktada bunu değiştiremezsin olarak çok fazla şey kaybettin.

Korkunç bir çözüm javascript için src ayarlamak için: URL (üff!):

 iframe.src= "javascript:'<html><body><p>Hello<\/p><script>do things;<\/script>'";

Ama nedense, böyle bir belge açılamadı kendi document.domain komut IE (eski güzel “belirtilmemiş hata”), yani sen normal bir insan değilsin için yeniden bir köprü arasında ana ortaklık(*). Sanaolabilirbütün belge HTML, widget örneği sonra ana belge konuşmaya gerek yok varsayarak yazmak için kullanın.

Ancak iframe JavaScript URL Safari çalışmıyor, hala tarayıcı koklama bir çeşit seçmek gerekir ediyorum.

*: Başka bir nedeniolabilirYANİ , ikinci belge document.domain ayarlayın.ilk belge tarafından yazılmış. Bu işleri bu kadar:

if (isIE)
    iframe.src= "javascript:'<script>window.onload=function(){document.write(\\'<script>document.domain=\\\"" document.domain "\\\";<\\\\/script>\\');document.close();};<\/script>'";

İğrençliği bu kısım benim için çok yüksek, bu noktada, ben Yokum. Davut gibi dış HTML yaparım.

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • Gigawipf

    Gigawipf

    18 ŞUBAT 2010
  • Vsauce

    Vsauce

    30 Temmuz 2007
  • whiteboy7thst

    whiteboy7ths

    1 Temmuz 2009