2013-05-21 20 views
0

我有需要顯示代碼文件的iframe。代碼文件具有.txt擴展名,並且應該只將代碼顯示爲文本。這適用於除IE8以外的所有瀏覽器。 IE8不斷將代碼文件呈現爲HTML。IE8 iframe呈現簡單的文本文件爲HTML,我需要原始代碼

<iframe id="codeFile222" 
    width="100%" height="200px" 
    marginheight="0" frameborder="0" 
    src="http://mrsbos.wikispaces.com/file/view/guessNumber.txt" 
    name="codeFile222" 
    onload="autoResize('codeFile222');changeColor('codeFile222')" 
    > 

任何想法,我能做到這一點,也使其在IE8

+4

什麼是來自您的Web服務器的「Content-Type」標頭值?這決定了瀏覽器應該如何顯示資源。 – Brad

+0

嗨,我如何知道內容類型是什麼?我可以改變這個嗎?順便說一句,它沒有像Chrome和Firefox這樣的其他瀏覽器的問題。他們可以擁有不同的內容類型嗎? – Jenita

+0

參見Ken的答案。正如他所建議的那樣,Fiddler是一個很好的工具,他提供了一個解釋,爲什麼它在這種情況下可能無關緊要。 – Brad

回答

0

Content-Type HTTP標頭指示資源(網頁,圖像或下載)的MIME type。對於HTML頁面,MIME類型通常爲text/html,對於文本文件,通常是text/plain

服務器不發送text/plain;charset=utf-8爲您的文本文件(如,例如,在Firebug的網板進行使用按Ctrl + F5 一個文件的硬性重新加載時顯示)。但是,與其他Web瀏覽器不同,Internet Explorer將在文件中看到HTML,並猜測服務器(Microsoft documentation)。

因爲這可能會帶來安全隱患,但Microsoft不希望冒險破壞與舊網站的向後兼容性(通過使IE的行爲與其他瀏覽器的行爲一致),Internet Explorer 8和更高版本支持X-Content-Type-Options: nosniff標頭以禁用在這種情況下的HTML檢測。但是,在Wikispaces這樣的站點上,您可能無法選擇發送標題,並且在任何情況下,標題在Internet Explorer 6和7中都不起作用。

在Wikispaces上,它可能有意義使用所提供的源代碼格式設置功能(見wikitext help page):

[[code format="javascript"]] 
alert('hello, world'); 
[[code]] 

如果你想將代碼存儲在單獨的頁面上,你可以從人們真的應該閱讀頁面包括它(Wikispaces include help page) 。這就是所謂的transclusion

[[include page="PAGENAME"]] 

做不到這一點,一個很好的選擇可能是HTML轉義代碼(使用一些文本替換)和<pre></pre>之間插入。然後你將上傳一個HTML文件(文件擴展名爲.htm.html)。爲了解釋的目的,這裏是一個簡單的JavaScript函數,它HTML轉義:

function htmlEscape(text) { 
    // Absolutely necessary 
    text = text.replace(/&/g, '&amp;'); // Has to go first 
    text = text.replace(/</g, '&lt;'); 

    // Not needed for your specific case, yet would be good to include 
    text = text.replace(/>/g, '&gt;'); 
    text = text.replace(/"/g, '&quot;'); 
    text = text.replace(/'/g, '&#39;'); // '&apos;' is only OK in XHTML and in HTML5 
    return text; 
} 
+0

turnToText2 = function(id){ if(window.XMLHttpRequest && document.all){ var text = null; var obj =文件。的getElementById(ID); var y = null; y =(obj.contentDocument || obj.contentWindow); var head = y.getElementsByTagName('head')[0]; var texth = head.innerHTML; console.log(「head:」+ head); console.log(「texth:」+ texth); text = y.body.innerHTML; text = texth + text; console.log(「text:」+ text); while(text.indexOf(「<」)!= - 1){ text = text.replace(「<」,「<」); } 而(!text.indexOf( 「>」)= - 1){ 文本= text.replace( 「>」, 「>」); } if(y!= null)y.body.innerHTML = text; } } else { console.log(「NOT IE:」); } } – Jenita

+0

嗨,感謝您的幫助。我現在已經使用了像你所建議的turnToText功能。起初結果只是以純文本顯示HTML標籤,而不是腳本。很顯然,瀏覽器已經將腳本標籤及其內容放在標籤中。所以我可以將它們從那裏拉出來,並將它們添加到代碼的其餘部分。我的功能現在看起來像這樣。我只需要在非白人休息空間換行等 – Jenita

+0

非常感謝 加入順便給結果的更好的佈局,我也將利用在wikispaces代碼標籤,因爲它並提高清晰度的不同顏色。所以謝謝你。我也很喜歡切換的效果,我可以用我自己的超鏈接和iframe中的創造,所以我想這對所有的瀏覽器作爲well.Thanks很多,請參閱下面的我適當的反應。 – Jenita

1

您提供的鏈接(mrsbos.wikispaces.com/file/view/guessNumber.txt)的工作文字/平原作爲內容類型,這樣就可以。

要查找的內容類型是什麼,你可以用Fiddler或只需右鍵單擊頁面,選擇頁面信息或類似的東西(取決於瀏覽器)。

我的猜測是,IE瀏覽器試圖聰明地自動檢測的內容,看到一個<script>標籤,並假設它是HTML。

在這些情況下,您將不得不對內容進行編碼,如有可能,還可以在源代碼爲<pre> -tags的服務器上提供html頁面。

0

這個問題已經存在了一段時間,可惜的是沒有真正合適的修補程序。有一件事可能會發揮作用,將iframe中的所有內容都包含在使用Javascript的<pre>標記中,但這有些破綻。

有在www.howtocreate.co.uk對這個問題的詳細信息,我將重現這裏的文章正文:

雖然我們對內容類型HTTP標頭的主題,XHTML是 不是唯一一個IE錯誤。它甚至不正確地處理純文本 。如果您發送的標題表明您正在使用純文本,但它包含的東西IE認爲是HTML,它將忽略 您的標題,並將其呈現爲HTML。因此,您仔細準備的文本文件會被轉換爲 幾乎無法讀取的入門段落,並且丟失了某些位並丟失了格式。

他們爲什麼要這樣做?因爲偶爾,HTML頁面不正確地被網頁服務器作爲純文本服務器 。如果發生這種情況,這將使IE瀏覽器將其呈現爲HTML格式。這聽起來像一個好主意,但是這是什麼 意味着作家誰使這些網頁都沒有意識到,他們的 頁被錯誤地被服務的文字,因爲當他們檢查 在IE瀏覽器,它看起來是工作。使用頁面指定的內容類型正確遵守 的瀏覽器將看到頁面源 而不是其內容。而且,這意味着許多文本文件被錯誤地修改爲 ,因爲IE認爲它們是HTML。

無論哪種方式,有人失去了。但是,如果IE沒有忽略文本 內容類型標題,作者會意識到存在問題,而 修復服務器。該頁面可以在所有瀏覽器中使用,並且IE 不會搞砸文本文件。

+0

嗨,謝謝你爲什麼和如何解釋。至少現在在某種程度上是有道理的。無論如何,我很高興探險家10沒有這個問題。 – Jenita

0

我現在已經使用了turnToText功能像你的建議。起初結果只是以純文本顯示HTML標籤,而不是腳本。顯然,瀏覽器已經將腳本標籤及其內容放在頭標籤中。所以我可以將它們從那裏拉出來,並將它們添加到代碼的其餘部分。我的功能現在看起來像這樣。我只需要在非白人休息空間換行等加入

turnToText2=function(id){ 
    if(window.XMLHttpRequest && document.all){ 

    var text=null; 
    var obj=document.getElementById(id); 
    var y=null; 

    y=(obj.contentDocument|| obj.contentWindow); 


    var head =y.getElementsByTagName('head')[0]; 
    var texth=head.innerHTML; 

    text=y.body.innerHTML; 
    text=texth+text; 

    while(text.indexOf("<")!=-1){ 
    text=text.replace("<","&lt;"); 
    } 
    while(text.indexOf(">")!=-1){ 
     text=text.replace(">","&gt;"); 
    } 

    if(y!=null){ 
    y.body.innerHTML=text; 
    } 

    } else{ 
    console.log("NOT IE:"); 
    } 
    } 

非常感謝

順便給結果的更好的佈局,我也將利用代碼標籤的wikispaces,因爲它確實提高了不同顏色的清晰度。所以謝謝你。我也喜歡切換效果,我可以用我自己的超鏈接和iframe創建,所以我希望它能夠在所有瀏覽器上運行。