2011-04-08 181 views
2

我有一個簡單的應用程序,解析Tumblr博客模板。它是在他們的定製屏幕後面建模的,幷包含帶有一些可配置選項和iframe的標題。每次選項更改時,應用程序都會重新加載iframe,序列化配置表單並將序列化數據的iframe src更新爲查詢字符串。防止iFrame改變位置?

這一切都正常工作,除了每次發生這種情況,我只能使用更改後的選項重新加載主索引頁。如果用戶希望通過離開索引來查看單個帖子頁面,則該模板僅使用默認選項呈現該頁面。 換句話說,當用戶瀏覽博客時,更改後的選項不會保留。

我之所以能有「持續變化」與$('iframe').load()事件,像這樣:

$('iframe').load(function(){ 
    updateTheme(); 
}); 

唯一的問題是,如你所知,這將等待iframe完全渲染頁面使用默認選項,然後使用更新的選項重新渲染。我的意思是......它的工作原理,但它不是一個很好的解決方案。

有沒有人知道我可以如何防止iframe加載,捕獲用戶所需的位置,然後使用當前選項重新渲染幀,如頭中所示?

任何幫助將不勝感激。提前致謝!

回答

1

這就是我想出了:

var p = top || parent; 

(function($){ 
    $('a').click(function(e) { 
    var prevent = e.isDefaultPrevented(), 
     is_local = p.isLocal(this.href), 
     is_hash = $(this).attr('href').match(/^#/); 

    if(prevent || ! is_local || is_hash) return; 
    e.prevenDefault(); 
    p.updateTheme(this.href); 
    return false; 
    }); 
})(jQuery); 

我擔心的是,我會成爲影響用戶連接到<a/>標籤的JavaScript事件,但顯然jQuery將檢測默認阻止事件,即使它們沒有被jQuery本身阻止。我測試了它這樣的:

document.getElementById('test-link').onclick = function() { 
    return false; 
} 

jQuery的檢測已經阻止了原始的事件,所以我只是假設我不應該繼續下去。

1

您是否同時擁有頂級頁面和嵌入式iframe頁面?如果是這樣,那麼你可以玩一些遊戲,但並不漂亮。例如,您可以重寫嵌入式iframe中的鏈接,以便預先填充配置選項,例如喜歡的東西:

$('iframe').load(function(){ 
    $('a', $('iframe')).each(function() { 
    var new_url = this.attr("href"); 
    new_url += config_options; 
    this.attr("href", new_url); 
    }); 
}); 
+0

我加了一個答案...讓我知道你在想什麼?我喜歡你的想法,但想盡可能少地改變文檔,所以我嘗試了一些小技巧,看看我能不能解決它。 – bschaeffer 2011-04-13 04:21:02