2012-03-01 28 views
1

我有一個UIWebView,我想在加載後注入一些HTML到它的末尾。使用javascript將HTML注入到iPhone上的網頁末尾

NSString* javaScript = [NSString stringWithFormat:@"document.body.innerHTML += '%@'", arbitraryHTML]; 
[self.webView stringByEvaluatingJavaScriptFromString:javaScript]; 

上面的代碼工作,但只有當任意HTML正確格式化。例如。單引號'被轉義爲'' 我想清除genearl中的HTML,以便我可以將它傳遞給javascript函數。

我需要轉義的其他字符或可能導致問題的字符串是什麼?

這裏的一些HTML,打破了上面的代碼示例:

<span><a onmouseover=\\\"jQuery\\'# >Test</a></span>" 

可這genearl辦呢?我還有什麼遺漏?

謝謝!

+0

難道你不認爲它是一個更好的主意,如果你從此代碼分離的JavaScript?這樣,你不需要做任何轉義 – 2012-03-01 07:35:45

+0

我不知道JavaScript那麼好,你會怎麼做?創建一些var myVar = myHTMLString;那麼document.body.innerHTML + = myVar;仍然好像你需要轉義字符的JavaScript ... – itgiawa 2012-03-01 18:56:38

+0

@JibiAbraham我不認爲這是可能的注入在UIWebView – user123444555621 2012-03-02 07:03:11

回答

2

你需要確保JS引擎不會嘔吐。所以你需要逃避單引號和反斜槓。這應該是訣竅:

arbitraryHTML = [[arbitraryHTML 
     stringByReplacingOccurrencesOfString:@"\\" withString:@"\\\\"] 
     stringByReplacingOccurrencesOfString:@"'" withString:@"\\'"]]; 

請注意,您還需要在Objective-C字符串內跳轉反斜槓,如上所示。

1

原來,它不足以逃脫單引號字符。我還需要轉義/ n和/ r,以便通用所有HTML。

可能還有其他一些我錯過的角色,如果我找到了我會發布的案例。