2013-01-10 41 views
4

我沒有結果地尋找使用Meteor和Iframe的例子。 (請注意,由於最終會到達那裏的內容,我必須使用iframe而不是DIV)。我試過兩種方法:與流星一起使用IFrame

<body> 
    {{> hello}} 
</body> 

<template name="hello"> 
    <h1>Hello World!</h1> 
    {{greeting}} 
    <input type="button" value="Click to see what you typed" /> 
    <br> 
    <iframe id="compose" src={{> iframe-content}} height=600></iframe> 
</template> 

<template name="iframe-content"> 
    <body> 
    <div contenteditable="true"> 
     Edit me 
    </div> 
    </body> 
</template> 

這個遞歸加載,連續創建子Iframe。

我也試過

<iframe id="compose" src="content.html" height=600></iframe> 

但流星munges的多個HTML文件一起這也導致了iframe失敗。

到目前爲止,唯一可行的工作是SRCDOC而不是SRC,但是多種瀏覽器(如FF)不能很好地支持該功能。

那麼,在Meteor中使用iframe有什麼用,最好是在模板中,而不是嚴格通過代碼?

回答

5

你想要'公共'文件夾。流星離開該文件夾中的內容單獨,如下所述:http://docs.meteor.com/#/full/structuringyourapp

移動「content.html」到一個名爲「公共」在你的項目/應用程序的根文件夾,並在HTML參考它像這樣:

<head> 
    <title>iframe</title> 
</head> 

<body> 
    {{> hello}} 
</body> 

<template name="hello"> 
    <h1>Hello World!</h1> 
    {{greeting}} 
    <input type="button" value="Click" /> 

    <iframe src="hello.html"></iframe> 

</template> 

爲了讓其他讀者清楚,Meteor沒有iframe的問題。問題在於引用了iframe的'content.html'文件的位置。

1

我不明白你的第一個代碼示例:

<iframe id="compose" src={{> iframe-content}} height=600></iframe> 

據我所知,這是I幀不是如何工作的;你必須在src屬性中指定一個url,你不能只把實際的HTML放在那裏。所以這是行不通的。

至於第二個例子:

<iframe id="compose" src="content.html" height=600></iframe> 

你預計流星得到content.html,如果你並沒有指明這條道路的存在呢?由於Meteor默認不設置路由,因此/content.html上沒有資源。所以你必須添加Meteor Router包或者類似的路由機制,然後告訴Meteor當被要求提供/content.html時,它應該只返回一些模板的內容。具有挑戰性的部分是弄清楚如何讓Meteor返回「真實」的HTML,而不是通常提供的流星包裹的實時HTML結構。

+0

我應該明確地說過,content.html是磁盤上的一個文件,它包含必要的HTML,減去Meteor抱怨的標籤,如。我試圖避免爲這樣簡單的事情添加路由包。添加一個路由包也意味着我必須更多地使用代碼而不是聲明性的。 –

0

我一直在玩的iframe最近(主要以封裝對應用網頁視圖做了一些頁面),如果你把那些HTML文件中/public文件夾和IFRAME SRC寫絕對URL /file.html那麼它只是工作。