2012-02-14 3 views
-1

Допустим, у меня есть HTML как это:UIWebView stringByEvaluatingJavaScriptFromString обертка тег с другой тег

<html> 
<form> 
<input type="button" id="Signature8" pdfFieldName="Signature8" onclick="document.location='pdz://signatureTapped?name=Signature8'" /> 
</form> 
</html> 

, и я хочу, чтобы заменить его программно с

<html> 
<form> 
<img src="Signature8.png"> 
<input type="button" id="Signature8" pdfFieldName="Signature8" onclick="document.location='pdz://signatureTapped?name=Signature8'" /> 
</img> 
</form> 
</html> 

в Objective-C с UIWebView. То, что я до сих пор, пришел к этому:

-(void) injectCode:(NSString*) code intoWebView:(UIWebView*) webView withEndCode:(NSString*) endCode { 
    NSString* innerhtml = [webView stringByEvaluatingJavaScriptFromString:[NSString stringWithFormat:@"document.forms[0].%@.outerHTML", self.identifier]]; 
    NSString* newCode = [NSString stringWithFormat:@"document.forms[0].%@.outerHTML=%@%@%@", self.identifier, code, innerhtml, endCode]; 
    [webView stringByEvaluatingJavaScriptFromString:newCode]; 
    NSLog(@"%@", [webView stringByEvaluatingJavaScriptFromString:@"document.body.outerHTML"]); 
} 

который следовало бы назвать так:

[f injectCode:[NSString stringWithFormat:@"<img src=\"%@.png\" id=\"%@\">", f.identifier, f.identifier] intoWebView:self.webView withEndCode:@"</img>"]; 

(а е представляет собой объект, который содержит имя, идентификатор и т.д. этого Signature8). Проблема в том, что это не работает. Когда я отлаживаю его, я вижу, что innerhtml заполнен, я вижу, что newCode на самом деле прав (по крайней мере для меня), и я подумал, что строка, которая назначает externalHTML с newCode, и все это должно заменить весь HTML соответственно. Чтобы проверить, я вывел его на консоль. Да ... ничего не изменилось.

Может ли кто-нибудь сказать мне, что я здесь делаю неправильно? Я не могу использовать jQuery или любую другую инфраструктуру, поскольку код должен получать свои HTML-формы от третьих лиц, и им не нужно использовать jQuery или что-то в этом роде.

ответ

0

Ну, к сожалению, нет, но я нашел решение с прокси-сервером, который может модифицировать HTML на лету, прежде чем я его получу. Работает также :-)

0

Вы просто не хватает кавычки вокруг нового HTML:

NSString* newCode = [NSString stringWithFormat:@"document.forms[0].%@.outerHTML=\"%@%@%@\";", self.identifier, code, innerhtml, endCode]; 

Помните outerHTML ожидает строку.

Смежные вопросы