javascript kullanarak kaynağı (src) değiştirirken, tarafından yapılan istek üzerine özel bir http başlığı eklemek için bir yol var mı?iframe src değiştirilirken özel http üstbilgileri nasıl ayarlanır?
cevap
Sen özel başlıklar şöyle bir iframe içeriği olarak ayarlanmalıdır olan bir ajax isteği sonuçları olabilir: Bu iframe üstleniyor
$.ajax({
type: "GET",
url: "https://app.icontact.com/icp/a/",
contentType: "application/json",
beforeSend: function(xhr, settings){
xhr.setRequestHeader("some_custom_header", "foo");},
success: function(data){
$("#output_iframe_id").attr('src',"data:text/html;charset=utf-8," + escape(data))
}
});
çapraz etki src işaret olduğunu. Her şeyin aynı alanda olması daha basittir.
Düzenleme: Belki bu varyasyonu deneyin.
$.ajax({
type: "GET",
url: "https://app.icontact.com/icp/a/",
contentType: "application/json",
beforeSend: function(xhr, settings){
xhr.setRequestHeader("some_custom_header", "foo");},
success: function(data){
$("#output_iframe_id").attr('src',"/")
$("#output_iframe_id").contents().find('html').html(data);
}
});
Aşağıdaki kod çalışır. Bu, CSS ve JavaScript referanslarının sorununu çözmek için srcdoc
özniteliğini kullanmak üzere değiştirilen code provided by Matthew Graves'un bir değişikliğidir. Maalesef, yalnızca Chrome'da çalışıyor.
$.ajax({
type: "GET",
url: "https://app.icontact.com/icp/a/",
contentType: "application/json",
beforeSend: function(xhr, settings){
xhr.setRequestHeader("some_custom_header", "foo");},
success: function(data){
$("#output_iframe_id").attr('srcdoc',data)
}
});
Düzenleme: Son olarak, document.ready fonksiyonu üzerine iframe onları yeniden atayarak, komut blokları çapraz tarayıcı sorunu çözdüm:
$(document).ready(function() {
var doc = $(document);
if (frames.length > 0) {
doc = frames[0].document;
$(doc).find('script').each(function() {
var script = document.createElement("script");
if ($(this).attr("type") != null) script.type = $(this).attr("type");
if ($(this).attr("src") != null) script.src = $(this).attr("src");
script.text = $(this).html();
$(doc).find('head')[0].appendChild(script);
$(this).remove();
});
}
});
Birlikte gidiş sona erdi Burada html dizesini almak için ajax kullanan ve daha sonra iFrame
'un içeriğini doğrudan belirleyen diğer yanıtlar tarafından önerilen yaklaşım.
Ancak, ben ben kazıp hemen hepsinin cihazlarla iyi çapraz platform çalıştı bulduğumuz gibi aslında iFrame
içeriğini ayarlamak için bu answer gönderilmiş yaklaşımını kullanmıştır.
Test - Başarılı:
- Krom 54 (masaüstü)^
- Firefox 49 (masaüstü)^
- IE 11 (masaüstü)^öykünme modunda
- IE 10 (masaüstü)^
- iOS 8 Safari/Chrome (ipad)
- Krom Android 6 (nexus telefon)
- EDG üzerinde
- IE 9 (masaüstü: başarısız - Lumia 950 (Win 10 Phone) e
(diğerleri test edilmedi)
Test içerikte bağlantılı css ve js düzgün çalışması doğruladı ^) öykünme modunda
- iOS 7 Safari/Krom (iPhone)
Yani araya koyarak böyle bir şey (Not verir: Aslında) tam olarak bu kod çalıştırmasına havn't: Burada
$.ajax({
type: "GET",
url: "https://yourdomain.com/gethtml",
beforeSend: function(xhr) {
xhr.setRequestHeader("yourheader", "value");
},
success: function(data) {
var iframeDoc = document.querySelector('#myiframe').contentWindow.document;
iframeDoc.open('text/html', 'replace');
iframeDoc.write(data);
iframeDoc.close();
}
});
iFrame
içeriğini
Düzenleme in this JS Bin ayarlamaya ilişkin bir örnek: Burada html parçası
<iframe id="myiframe" src="about:blank"></iframe>
Düzenleme 2 açıklanmıştır:
Yukarıdaki ap Artık bilinmeyen bir nedenle Firefox’ta (50.1.0) çalışan armutlar. Ayrıca görünüyor şimdi aşağıdaki örnekle koduna değiştirdik bu answer çözümü kullanarak daha sağlam olması için:
$.ajax({
type: "GET",
url: "https://yourdomain.com/gethtml",
beforeSend: function(xhr) {
xhr.setRequestHeader("yourheader", "value");
},
success: function(data) {
var iframe = document.getElementById('myiframe');
iframe.contentWindow.contents = data;
iframe.src = 'javascript:window["contents"]';
}
});
maalesef, 'in-app' göreceli yolları kullanarak bazı içerikler yüklerseniz, büyük olasılıkla problemlerle karşılaşacaksınız. Açısal2 ile çalıştı ve yönlendirme sorunları bulundu 'rota bulunamadı' ... Henüz bir cevap bulunamadı. – eatmypants
@eatmypants Ne koştuğunuzdan emin değilim - angular2 ile oynamamışım, ancak bunu angular1'de kullanıyorum. Sunucuya yapılan çağrı ajax olduğundan, URL'lerinizi diğer ajax çağrıları için yaptığınız şekilde çözebilmeniz gerekir. Belki de 'iFrame'in src'sini düzenliyor musunuz? Ben sadece 'boş' olarak bırakıyorum. –
Aksine URI verileri kullanarak veya bir dizeye içeriğini ayarlamak yerine can URL.createObjectURL()
kullanın ve iframe'in src
'u olarak ayarlayın.
var xhr = new XMLHttpRequest();
xhr.open('GET', 'some.pdf');
xhr.onreadystatechange = handler;
xhr.responseType = 'blob';
xhr.setRequestHeader('Authorization', 'Bearer ' + token);
xhr.send();
function handler() {
if (this.readyState === this.DONE) {
if (this.status === 200) {
// this.response is a Blob, because we set responseType above
var data_url = URL.createObjectURL(this.response);
document.querySelector('#output-frame-id').src = data_url;
} else {
console.error('no pdf :(');
}
}
}
Nesne URL'leri oldukça ilgi çekicidir. blob:https://your.domain/1e8def13-3817-4eab-ad8a-160923995170
formundalar. Bunları yeni bir sekmede açabilir ve yanıtı görebilir ve bunları oluşturan içerik kapatıldığında atılırlar.
İşte tam bir örnek: https://github.com/courajs/pdf-poc
URL nesnesi mevcutsa, bu en iyi yanıt olarak görünüyor. Aksi halde kabul edilen cevaba geri çekilir. –
- 1. Özel HTTP İstek üstbilgileri HTML
- 2. imageview src nasıl ayarlanır?
- 3. Özel HTTP üstbilgileri RESTful isteklerine iletme
- 4. Javascript kullanarak bir url nasıl açılır ve isteğe özel HTTP üstbilgileri ayarlanır?
- 5. Komut satırından IIS'ye özel HTTP Üstbilgileri nasıl eklenir
- 6. iFrame src içeriğini javascript kullanarak nasıl edinebilirim?
- 7. Angular2/Http (POST) üstbilgileri
- 8. Github sayfaları, HTTP üstbilgileri
- 9. Tüm iframe içeren src = "some_src.com/....." ifadesini kaldır
- 10. iframe nesnesindeki src/konum değişikliğini algılama
- 11. Bir librowl ile HTTP üstbilgileri nasıl ayrıştırılır?
- 12. WSGI katman yazılımında http üstbilgileri nasıl eklenir?
- 13. Gerekli HTTP üstbilgileri alanları nedir
- 14. iOS'ta Alamofire'deki Özel HTTP Üstbilgileri Ayarı 7 çalışmıyor
- 15. AngularJS özel doğrulama, programlı olarak değiştirilirken tetiklenmiyor
- 16. HTTP yanıtında üstbilgi nasıl ayarlanır?
- 17. Özel e-posta üstbilgileri nasıl oluşturulur
- 18. Eşzamansız WebClient isteğinde HTTP üstbilgileri alın
- 19. http üstbilgileri ayarlama RSpec 2.4/Rails 3
- 20. Kakao'da NSURLRequest/NSURLConnection üzerinden HTTP Üstbilgileri Al
- 21. HTTP Üstbilgileri JAX-WS hizmet yanıtına ekle
- 22. IIS önbellekleme için http-üstbilgileri yapılandırılabilir
- 23. HTTP önbellek denetim üstbilgileri WCF hizmetinde ayarlama
- 24. Bilinmeyen İçerik-Uzunluğu için HTTP Üstbilgileri
- 25. Web API'sinde HTTP önbellek denetim üstbilgileri ayarlama
- 26. Pivot üstbilgileri için farklı bir seçilmemiş stil nasıl ayarlanır?
- 27. SAP UI5> 1.30, başlangıç isteğinden önce özel model üstbilgileri nasıl ayarlanır
- 28. HTTP üstbilgileri Play 2.0 (scala) olarak mı ayarlanıyor?
- 29. Facebook: şema benzeri // iframe src gibi düğmeler için sorunlar
- 30. Bir Flask testindeki tüm istekler için HTTP üstbilgileri ayarlayın
Çok teşekkürler! Bu arada, aynı alandaki fark nedir? – dave
IE için çalışmıyor: -S. Chrome ve Firefox'ta çalıştı, ancak harici dosyadan css kuralları ve komut dosyaları (çerçevenin içinde başvurulan) uygulanmaz. – dave
Bunu bir şut verebilir –