2011-08-15 103 views
3

我必須用UIWebView和Javascript做一些複雜的工作,並且當我嘗試插入複雜的Javascripts時,總會遇到問題,這些複雜的Javascripts涉及包含JavaScript本身的JQuery和HTML片段。我似乎沒有足夠的引用和單引號,並且放入腳本元素有點痛苦。代碼片段使用複雜的JavaScript在UIWebView中插入HTML?

我有一個神奇的Objective-C代碼片段,或者使用更復雜的腳本的更容易的複製粘貼方法,您可以使用這些任務嗎?

編輯:爲了解釋多一點,我有HTML(也包含JavaScript和類似的東西<a href="javascript:doSomething('stupid')")>的大段,我需要把通過JavaScript的DOM,我在一個UIWebView中加載一個網頁之後

。我現在的做法是將HTML文件放入文件中,重寫它們,以便我例如在JS變量中具有「愚蠢」的特性,所以我不需要額外的單引號,將佔位符置於像### placeholder1 ### ,將該文件加載到NSString中,並通過html = [html stringByReplacingOccurrencesOfString:@"###placeholder1###" withString:dynamicStuffHtml];將我的應用程序中生成的動態數據替換爲這些佔位符。之前的動態數據不包含單引號,除了文本內容之外,我將其替換爲HTML編碼的單引號&#39;

然後我試圖把那整個字符串到DOM做這個:

NSString* javascript = [NSString stringWithFormat:@"%@%@%@",@"jQuery('.focus_box').first().before('",html,@"');"]; 
[webView stringByEvaluatingJavaScriptFromString:javascript]; 

(當我把在簡短的段落或簡單的HTML爲例)這適用於簡單的和短期的例子,但對於全面約50-60行的HTML代碼片段,它只是不起作用。此外,所有編輯,替換,修補和填充使我認爲,也許有人使用UIWebViews和JavaScript有一個更好的解決方案,已知工作。

編輯再次:我開始了一個賞金,因爲我不能相信有這麼幾個UIWebView的用法,沒有人能回答這個問題,或者已經有一個大的私人工具類來處理這種更復雜的JavaScript交互,其中大無需重新加載即可包含HTML塊。 :-)

+0

你有權訪問HTML頁面,即他們是否是第三方網站? –

+0

你不能只使用jquery的負載? ''('。selector')。load('/ path/to/file',callback);'你可以在其中加載完整的html文件,並且不必擔心任何額外的序列化。只需將文件編寫爲它自己的文檔即可。但是,您的全局JS庫只需要加載到主文檔中。 – jyore

+0

部分地,我有權訪問(我的應用程序中有HTML頁面,我在應用程序中構建,假設我想用應用程序中生成的新HTML大小的內容更新它,而無需重新加載頁面),部分使用外部網站當我在其原始頁面上顯示外部內容時,我也希望包含一些HTML,也許更大的JavaScript或兩個JavaScript來處理用戶操作)。 ...jQuery的負載從服務器加載數據,但是我想將HTML生成的*在我的iPad應用*中粘貼到頁面中,而不是從某些服務器應用獲得的數據。 – Akku

回答

1

要加載裏面的UIWebView一些文件格式,請執行下列操作

<script language="javascript" type="text/javascript"> 
var bundlePath = "here_goes_full_path_to_your_bundle"; 
// It should be something like file:///var/.../YouApp.app 
// Set it from your code 

jQuery.get(bundlePath + "/someFile.html", function(data) {alert(data);}); 
</script> 
+0

這意味着我需要將我生成的HTML寫入文件以便能夠通過jQuery加載它。它不如預期好,但也許它會工作。明天會試試看。 – Akku

0

我創造了一些網站內部的東西,這很過分使用這種技術。我最大的問題是正確的越來越封裝引號是因爲所有的報價都被屏蔽(用)

這裏是一個小片段:

code += "<table onclick='gbyid(\"suchfeld " + parametername + "\").value = \"\", " + parametername + " = \"\"'><tr><td>Delete Date</td></tr></table>" 

我不知道,如果這會有所幫助,但'它只是不起作用'不是大提示:)