我正在爲網站製作html小部件。比方說,它會顯示當前的股票指數。
總之,任意的網站所有者需要從我的代碼片段,並將其包含在他的網頁http://website.com/index.html。當任意用戶打開http://website.com/index.html時,我的代碼將請求發送到我的服務器(provider.com),該服務器執行必要的操作並將信息返回給用戶的瀏覽器。當響應已到達時,用戶將在http://website.com/index.html上看到相關庫存值。html小部件與服務器通信
在index.html的服務可以這樣調用
<script type="text/javascript" src="provider.com/service.js"> </script>
<div id="target_area"></div>
<script type="text/javascript">
service.show("target_area", options);
</script>
現在的問題是在same origin policy:我不能只從website.com發送Ajax請求provided.com並返回的HTML嵌入客戶的網頁。我看到幾個解決方案,我在下面列出,但沒有一個讓我滿意。我想知道,如果你能提出一些建議,特別是如果你有一些相關的經驗。
1)iframe,簡單明瞭。缺點:必須具有固定尺寸+出現在某些瀏覽器中的愚蠢滾動條。可以用javascript修復,但所有這些特定於瀏覽器的修補對我來說聽起來都不太好。
2)JSONP。問題:無法返回整個html塊,只能返回數據。然後,在瀏覽器端,我必須使用javascript將數據嵌入靜態放置在index.html中的html代碼段中。聽起來不太好,因爲數據格式不是很簡單,甚至可能稍後會改變。
3)使用隱藏的iframe做ajax請求。有點棘手,但聽起來像是一種方式。
那麼,這是我對這個問題的想法。有沒有更好的方法?
順便說一句,我試圖檢查一些現有的小部件,但沒有找到很多有用的信息。
本文中使用的所有域名都是虛構如有雷同,純屬巧合:)
更新現在 作品,SLaks建議!如果任何人的興趣在細節,響應HTML有這樣的(紅寶石),以進行後處理,
body = body.gsub '"', '\\"'
body = body.gsub /\n/, '\\n';
body = body.gsub '/', '\\/';
body = params[:callback] + '("' + body + '");';
之後,你可以使用jQuery與「數據類型:‘JSONP’」選項。
你的意思是,轉義html並將其作爲字符串常量返回?聽起來不錯,但是在服務器上添加這樣的後期處理可能會非常棘手(我在rails上使用ruby,但是在java中我知道這也不是微不足道的)。無論如何,我會試一試! – 2010-06-09 02:21:12
您的環境應該有一個JSON編碼器。 – SLaks 2010-06-09 02:28:19
確實,但它假定我返回json,而不是html。編碼它有點棘手(取代引號,換行符等),但我正在路上。 – 2010-06-09 03:03:55