看起來,以確保我們的內容的唯一方法是檢查網頁的URL託管我們的JavaScript匹配訂閱網站。
嗯,但在客戶端或服務器端的代碼?
它們都有它們的缺點。用服務器端代碼做這件事是不可靠的,因爲一些瀏覽器根本不會傳遞一個Referer
頭文件,並且如果你想停止緩存保存腳本的副本,防止Referer檢查發生,你必須服務使用nocache或Vary: Referer
標題,這會損害性能。
另一方面,在您返回的腳本中使用客戶端檢查時,您無法確定您所運行的環境是否未被破壞。例如,如果你的包容腳本標籤是這樣的:
<script src="http://include.example.com/includescript?myid=123"></script>
和你的服務器端腳本擡頭123
爲使用域customersite.foo
客戶的ID,它可能與腳本回應:
if (location.host.slice(-16)==='customersite.foo') {
// main body of script
} else {
alert('Sorry, this site is not licensed to include content from example.com');
}
看起來很簡單,除了包含站點可能用代替了總是返回customersite.foo
的函數。或者腳本主體中使用的各種其他功能可能會受到懷疑。
從另一個安全上下文中包含<script>
可以切換兩種方式:包含站點必須信任源站點不會在其安全上下文中執行任何錯誤操作,如竊取最終用戶密碼或用大山羊替換頁面;但同樣,源站點的代碼只是包含站點的可能惡意定製的安全上下文中的一個訪客。因此,只要一個站點包含另一個站點的腳本,雙方之間就必須存在一種信任度量;域檢查永遠不會是一個100%安全的安全機制。
我想包括一個樣式表,以及如果可能風格的元素,但我不知道如果我可以加載這個與JavaScript一起。
您當然可以將樣式表元素添加到文檔的head元素,但您需要一些強大的名稱空間以確保它不會影響其他頁面樣式。爲簡單起見,您可能更願意使用內聯樣式,並避免來自頁面主樣式表的特殊干擾。
這取決於您是否希望生成的內容成爲主機頁面的一部分(在這種情況下,您可能更願意讓包含網站自行處理它們想要的風格),還是希望它能夠保持原樣不受上下文影響(在這種情況下,您最好將自己的內容放入中)。
我想使用jQuery的,因此包括文件將在jQuery的
先打電話我會盡量避免拉扯的jQuery到宿主頁面。即使使用noconflict
,也有一些方法可能會與其他不期望它存在的腳本衝突,特別是像其他框架一樣複雜的腳本。在同一頁面上運行兩個框架是奇怪錯誤的祕訣。
(如果你拿了路線,在另一方面,你會得到你自己的腳本方面一起玩,所以它不會是一個問題在那裏。)
+1歡迎堆棧溢出,邁克! – Sampson 2010-02-16 16:52:26
感謝Jonathan,我在網站 – Mike 2010-02-17 11:25:57