2011-10-06 152 views
2

,先看看我的fiddle fiddle如何將jQuery傳遞給eval'd代碼?

的jsfiddle是好的,但有時它運行有點慢,所以我做了這個簡單的純JS小提琴

偉大的工作,到目前爲止,(可以在本地運行),但我想能夠在我的小提琴中使用jQuery。在左下角的框中輸入alert(typeof $);,然後按「運行」查看我的意思(說未定義)。

那麼,如何將jQuery傳遞給iframe並給它正確的上下文?我懷疑我可以設置doc.contentWindow.$=$或類似的東西,但我仍然需要給出正確的上下文,以便知道在哪裏查找元素。我會怎麼做?


iframe.contentWindow.$ = $.proxy($,iframe.contentWindow); 

這也不能工作。讓我可以訪問jQuery,但上下文仍然是錯誤的。


iframe.contentWindow.$ = function(s){return $(s,doc);}; 

那種作品......但它是一個黑客攻擊的一位。

+0

爲什麼不使用指向Google CDN的''中,好像它試圖關閉字符串外部的實際'',並在中間結束腳本塊,你需要重新調整一點點:'\ x3Cscript type =「text/javascript」src =「http://code.jquery.com/jquery-1.6.4.js」> \ x3C/script>'。[So urce](http://stackoverflow.com/questions/236073/why-split-the-script-tag-when-writing-it-with-document-write)。 –

+0

這麼想!謝謝。這擺脫了JS錯誤,但jQuery仍然無法訪問。 – mpen

1

我調整你的小提琴提琴一點:http://jsfiddle.net/gilly3/XcSYz/3/

首先,你不能寫一個DOCTYPE對身體的innerHTML並期望它能夠爲你做任何事情。與charset元標記一樣。我把所有這些都轉移到了document.write電話。

您正在評估編輯器輸入的腳本標記。首先,如果您正在編輯HTML框架中的腳本標記,這會引發錯誤。其次,如果您將alert("hello")放置在HTML窗格的腳本標記中,那麼每次按鍵時都會收到警報。第三,您正在父窗口的上下文中評估腳本。我更改了html腳本標記,以便在單擊運行並使用正確的上下文時進行評估。

由於你不想每次都重寫文檔(你不能,例如doctype),我稍微修改它來做一些dom操作。它將刪除並替換樣式標記,並僅將HTML窗格內容寫入主體的innerHTML。

這是一個有趣的小項目,你正在嘗試。 jsFiddle是越野車,需要一些更新。我不知道你的純粹的客戶端小提琴是如何可行的 - jsFiddle非常強大(儘管存在缺陷),但嘗試一下你的方法是一個不錯的練習。包括在this version還有一個變化:

編輯我修改你的文字區域使用width: 50%; height: 50%;而不是設置rightbottom。那些在IE或FF中無法正常工作。

+0

第一段:哎呀。沒有想到一個通過。第二:是的,我意識到同樣的事情,這就是爲什麼我添加了「運行」按鈕,但我忘了刪除舊代碼。我可能會有一個複選框,但在編輯html時會持續運行。感謝提示/幫助!我可能會試着看看他們以後如何做語法高亮和縮進。 – mpen

+0

你爲什麼要刪除'