當使用javascript更改源(src)時,是否有方法將自定義http標頭添加到完成的請求中?如何在更改iframe src時設置自定義http標題?
回答
你可以有一個具有自定義標題設置爲一個iframe的像這樣內容的Ajax請求的結果:
$.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))
}
});
這是假設的iframe是在跨域SRC指向。如果一切都在同一個域上,則更簡單。
編輯:也許試試這個變化。
$.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);
}
});
以下代碼有效。它是對code provided by Matthew Graves的修改,修改爲使用srcdoc
屬性來解決未運行CSS和JavaScript引用的問題。不幸的是,它只能在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)
}
});
編輯:最後,我已經解決了這個腳本塊跨瀏覽器的問題,由他們重新分配到的document.ready功能的iframe:
$(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();
});
}
});
我結束了去這裏的其他答案提出的方法,即使用ajax來獲取html字符串,然後直接設置iFrame
的內容。
但是,我使用了answer中發佈的方法來實際設置iFrame
的內容,因爲我發現它幾乎可以與所有可以挖掘的設備交叉平臺運行。
測試 - 成功:
- 鉻54(桌面)^
- 火狐49(桌面)^
- IE 11(桌面)^在仿真模式
- IE 10(桌面)^
- Safari /鉻在iOS 8(的ipad)
- 鉻在Android 6(Nexus手機)
- 的Edg E在的Lumia 950(10場電話)
^證實,在內容鏈接的CSS和JS正常運行(其他未測試)
測試 - 不成功:
- IE 9(桌面)在仿真模式
- Safari /鉻在iOS 7(iPhone)
所以,把它們放在一起讓這樣的事情(注:我沒有帶實際運行這個確切的代碼):
$.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
內容in this JS Bin
編輯的例子:這裏的HTML部分
<iframe id="myiframe" src="about:blank"></iframe>
編輯2:
上面的解決方案ap由於某些未知原因,梨不再在Firefox(50.1.0)中工作。利用該解決方案在此answer我現在改爲代碼下面的例子中,這似乎也更穩健:
$.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"]';
}
});
不幸的是,如果您使用相對路徑的「應用內」加載了一些內容,您可能會遇到問題。 試過它與angular2和得到路由問題的路線未找到... ...還沒有找到任何答案。 – eatmypants
@eatmypants不知道你在跑什麼 - 我還沒有玩過angular2,但我正在使用angular1。由於對服務器的調用是ajax,因此您應該能夠以任何其他ajax調用的方式來解析您的url。你是否正在編輯'iFrame'的'src'?我只是把它留作'about:blank'。 –
而不是使用數據URI或內容設置爲一個字符串,可以使用URL.createObjectURL()
,並將其設置爲iframe的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 :(');
}
}
}
對象網址非常有趣。它們的格式爲blob:https://your.domain/1e8def13-3817-4eab-ad8a-160923995170
。實際上,您可以在新選項卡中打開它們並查看響應,並在創建它們的上下文關閉時丟棄它們。
下面是一個完整的示例:https://github.com/courajs/pdf-poc
如果URL對象可用,這看起來是最好的答案。否則降級爲接受的答案。 –
- 1. 如何在運行時更改iframe src?
- 2. SDWebImage並設置自定義HTTP標頭?
- 3. 如何設置自定義HTTP請求標題
- 4. 如何更改iframe src?
- 5. iframe src更改
- 6. 更改iframe src
- 7. SoapClient設置自定義HTTP標頭
- 8. 如何在使用IHttpActionResult時設置自定義標題?
- 9. 通過iFrame發送自定義標題src
- 10. 如何在asp.net mvc中設置Iframe src?
- 11. 更改iframe的src
- 12. 在iframe/Javascript中更改src
- 13. CSS - 自定義標題設置
- 14. 如何將iframe的src更改爲iframe中的嵌入src?
- 15. 如何在發佈請求時在HTTP標頭中設置自定義變量
- 16. 如何在drupal 7中更改自定義模塊標題
- 17. 如何在dotCMS中設置http標題
- 18. 如何將iframe src設置爲IP
- 19. 如何設置iframe的src屬性
- 20. 如何設置iframe的src屬性?
- 21. 如何在Phalcon控制器中設置自定義標題
- 22. 如何在Moodle主題設置中創建自定義標記?
- 23. 如何在自定義404頁面上設置頁面標題?
- 24. 如何在iframe src更改時運行函數?
- 25. 如何在iframe src更改時觸發某個函數?
- 26. 如何動態更改Iframe的標題?
- 27. 當src更改時轉到iframe
- 28. 在自定義標題欄上設置標題文本
- 29. 自定義HTTP類Angular 2更改基本URL並設置超時
- 30. 無法更改iframe的src
非常感謝!順便說一句,如果它在同一個域中有什麼區別? – dave
它不適用於IE:-S。在Chrome和Firefox中工作,但來自外部文件的css規則和腳本(在框架內引用)不適用。 – dave
給這個鏡頭也許 –