2013-03-26 35 views
4

是否有可能在一個滾動的div裏面有一個非滾動的iFrame,並且在iFrame中有錨鏈接能正常工作? iFrame內的錨鏈接應滾動到iFrame內部的位置,我不需要/希望它們指向父頁面上的元素。iframe中的錨鏈接什麼也不做

這裏是我的jsfiddle一個簡單的例子:

http://jsfiddle.net/shopguy/WjmHG/

,併爲它的代碼:

<div style="width: 100%; height: 300px; overflow: auto;"> 
<iframe style="width: 100%; height: 2000px;" src="http://www.hypergurl.com/anchors.html" scrolling="no"></iframe> 
</div> 

我有在我的例子使用了hypergurl.com鏈接沒有任何關聯,這只是我能找到的第一個帶有id/name語法鏈接錨點的頁面。

如果加載JSFiddle並單擊iFrame內的「Jump to Bottom」鏈接,它將不執行任何操作(使用FireFox 19.0.2進行測試)。當使用各種頁面進行測試時,它在FireFox中永遠不會工作,在Chrome中它有時會在第一次點擊時運行,但如果再次向上滾動並再次單擊,則不起作用。在IE8中,它大部分時間都在運行(卷軸)。

如果我讓iFrame本身具有滾動條(刪除滾動=「否」),滾動可以正常工作。雖然這對我來說不是一個實際的解決方案,因爲我在框架外有內容,我想用它滾動。在我真實的代碼中,我動態地設置了iFrame的高度來填充它的內容,這樣看起來更像是我的頁面上的內容。

,爲什麼我要做這個附加信息:

我創建一個基於Web的電子郵件客戶端,而且目前似乎是問題最少的,如果我顯示郵件的HTML體內一個iframe,vs試圖在我的頁面內的表格單元格或div內顯示。我想要這些類型的鏈接工作。我對內容有一定的控制權,它來自我的服務器,我可以修改它(但不想太多)。例如,我已經修改了所有鏈接以便在新窗口中打開(但不包含以#開頭的鏈接,所以這不是我的問題)。

我知道GMail不使用iFrames,但是我的XFINITY(通過Comcast電纜)基於Web的電子郵件客戶端可以,他們設法使這些工作正常(但到目前爲止還沒有弄清楚他們在做什麼)。

+0

https://bugzilla.mozilla.org/show_bug.cgi?id=638598可能是相關的,但我在web-kit瀏覽器中也看到了這一點,而不僅僅是Mozilla。另外,我看過沒有這個問題的網頁。那些工作的確可以從JavaScript加載iFrame內容,而不是通過src屬性,所以也許只有在我將設計更改爲(需要很多工作)時纔有效。 – eselk 2013-03-26 20:37:02

回答

2

看看這個帖子:Jump Link Inside an iFrame

如果您的IFRAME有不同的域,那麼您將無法使用JavaScript的解決方案來解決這個問題,但如果是,那麼你可以添加目標=「_父」屬性到iframe中的所有錨點。

var iframe = document.getElementById('iframeId'); 
var doc = (iframe.contentDocument)? iframe.contentDocument: iframe.contentWindow.document; 

var anchors = doc.getElementsByTagName('a'); 
for (var i = 0; i < anchors.length; i++) 
    anchors[i].target = '_parent'; 
0

我最近在這個庫中添加了代碼來解決iFrame中錨鏈接的所有問題。

https://github.com/davidjbradshaw/iframe-resizer

它攔截所有請求在頁面導航和滾動父頁到正確的位置。如果它沒有在iFrame中找到錨點,它會將其拖動到父頁面並在其中查找。