Czy istnieje sposób dodania niestandardowego nagłówka http do żądania wykonanego przez podczas zmiany źródła (src) przy użyciu javascript?Jak ustawić niestandardowe nagłówki http podczas zmiany elementu iframe src?
Odpowiedz
Można mieć wyniki żądania AJAX, który ma być ustawiony niestandardowych nagłówków jako zawartość iframe tak:
$.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))
}
});
to zakładając iframe jest wskazując na pole karne src domeny. Łatwiej jest, jeśli wszystko jest w tej samej domenie.
Edytuj: Może spróbuj tej odmiany.
$.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);
}
});
Poniższy kod działa. Jest to modyfikacja code provided by Matthew Graves, zmodyfikowana w celu użycia atrybutu srcdoc
w celu rozwiązania problemu, który nie został uruchomiony z odwołaniami do skryptów CSS i JavaScript. Niestety działa tylko w Chrome.
$.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)
}
});
Edit: Wreszcie mam rozwiązany skryptów blokuje krzyżowego przeglądarki, zmieniając je w iframe na document.ready funkcję:
$(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();
});
}
});
skończyło się dzieje z podejście zaproponowane przez inne odpowiedzi tutaj, które używają ajax, aby uzyskać ciąg html, a następnie bezpośrednio ustawić zawartość iFrame
.
Jednak użyłem podejścia przedstawionego w tym answer, aby faktycznie ustawić zawartość iFrame
, ponieważ okazało się, że działa dobrze na platformie z prawie wszystkimi urządzeniami, które mogłem wykopać.
Testowane - skuteczny:
- Chrom 54 (komputer)^
- Firefox 49 (komputer)^
- IE 11 (komputer)^
- IE 10 (komputer), w trybie emulacji^
- Safari/Chrome na iOS 8 (ipad)
- Chrome na Androida 6 (telefon Nexus)
- Edg e na Lumia 950 (Win 10 kodów)
^potwierdzono, że połączone CSS JS zawartości móc (innych nie badano)
Testowane - nieskuteczne:
- IE 9 (pulpit) w trybie emulacji
- Safari/Chrome na iOS 7 (iPhone)
więc wprowadzenie ich razem daje coś takiego (uwaga: Havn't faktycznie uruchomić dokładnie ten kod):
$.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();
}
});
Oto przykład ustawiania iFrame
zawartość in this JS Bin
Edit: Oto część html
<iframe id="myiframe" src="about:blank"></iframe>
Edit 2:
Rozwiązanie powyżej gruszki nie działają już w Firefox (50.1.0) z jakiegoś nieznanego powodu. Stosując rozwiązanie w tej answer Mam teraz zmieniony na kod na poniższym przykładzie, który również wydaje się być bardziej wytrzymałe:
$.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"]';
}
});
Niestety, jeśli załadujesz trochę treści przy użyciu ścieżek względnych "w aplikacji", prawdopodobnie napotkasz problemy. Próbowałem z kątowym 2 i otrzymałem problemy trasy routingu "nie znaleziono trasy" ... Nie znalazłem jeszcze odpowiedzi. – eatmypants
@eatmypants Nie jestem pewien, na co się natkniesz - nie grałem z kątowym 2, ale używam tego w kanciarzu1. Ponieważ wywołanie serwera to ajax, powinieneś być w stanie rozwiązać adresy URL w dowolny sposób, jaki wykonujesz dla innych wywołań ajaxowych. Czy edytujesz 'src' z' iFrame'? Po prostu pozostawiam to jako 'about: blank'. –
Zamiast przy użyciu danych URI, lub ustawienie zawartości do łańcucha, można użyj URL.createObjectURL()
i ustaw jako element iframe jako src
.
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 :(');
}
}
}
Adresy URL obiektów są całkiem interesujące. Są w formie blob:https://your.domain/1e8def13-3817-4eab-ad8a-160923995170
. Możesz je otworzyć w nowej karcie i zobaczyć odpowiedź, a zostaną one odrzucone, gdy kontekst, który je utworzył, zostanie zamknięty.
Oto pełny przykład: https://github.com/courajs/pdf-poc
To wygląda najlepiej, jeśli obiekt URL jest dostępny. W przeciwnym razie przejdź do zaakceptowanej odpowiedzi. –
- 1. Jak ustawić src do elementu iframe za pomocą jQuery?
- 2. Czy można "sfałszować" atrybut src elementu iframe?
- 3. Jak ustawić globalne niestandardowe nagłówki w Angular2?
- 4. Jak ustawić niestandardowe nagłówki w PHP
- 5. ustawić Blob jako „src” w iframe
- 6. jquery $ .ajax niestandardowe nagłówki nagłówków http:
- 7. Jak uzyskać nagłówki odpowiedzi iframe?
- 8. ServiceStack JsonServiceClient - Niestandardowe nagłówki HTTP nie wysłane
- 9. Jak powiązać dane z atrybutem src iframe?
- 10. Jak uzyskać nagłówki HTTP
- 11. Jak otworzyć adres URL za pomocą javascript i ustawić niestandardowe nagłówki HTTP w żądaniu?
- 12. Zmień iframe src klikając link
- 13. Zmień wartość elementu iframe elementu
- 14. Wysyłanie niestandardowe nagłówki przez RSpec
- 15. Leniwe obciążenie iframe (opóźnienie wywołania src http) z jquery
- 16. Uzyskiwanie bieżącego src elementu iframe za pomocą JQuery
- 17. Angular: błąd atrybutu src w dyrektywie Iframe
- 18. Iframe bez src - Czy mogę to zrobić?
- 19. Jak zmienić iframe src korzystanie angularjs
- 20. Wstrzymaj osadzanie elementu iframe YouTube podczas odtwarzania innego
- 21. Zdarzenie niestandardowe wyzwalacza z elementu iframe do dokumentu nadrzędnego
- 22. Wykryj zmiany orientacji w elemencie iframe
- 23. Nagłówki Angular2/Http (POST)
- 24. Jak ustawić nagłówki w Cordova InAppBrowser?
- 25. wywołanie zwrotne jQuery przy ładowaniu obrazu podczas zmiany src
- 26. Jak ustawić src obrazu przy użyciu jQuery
- 27. Jak mogę obsłużyć błędy podczas ładowania elementu iframe?
- 28. Niestandardowe nagłówki na Amazon S3
- 29. Jak znaleźć element div wewnątrz elementu iframe?
- 30. Strony Github, nagłówki HTTP
Dzięki wielkie! A tak przy okazji, jaka jest różnica, jeśli znajduje się w tej samej domenie? – dave
Nie działa dla IE: -S. W przeglądarce Chrome i Firefox działało, ale reguły css i skrypty z pliku zewnętrznego (odwoływane wewnątrz ramki) nie są stosowane. – dave
daj temu szansę być może –