UIWebView stringByEvaluatingJavaScriptFromString使用其他标记包装标记

时间:2012-02-14 12:23:29

标签: iphone html objective-c ipad uiwebview

假设我有一个像这样的HTML:

<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>
带有UIWebView的Objective-C中的

。到目前为止我所做的是提出这个:

-(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>"];

(而f是包含Signature8字段的名称,标识符等的对象)。 问题是:这不起作用。当我通过它调试时,我可以看到innerhtml填充,我可以看到newCode实际上是正确的(至少对我来说)我认为将outerHTML与newCode分配的行应该相应地替换整个HTML。为了验证,我将其登录到控制台。是啊......一切都没有改变。

谁能告诉我这里我做错了什么?我不能真正使用jQuery或任何其他框架,因为代码应该从第三方获取其HTML表单,并且他们不必使用jQuery或类似的东西。

2 个答案:

答案 0 :(得分:0)

你只是错过了新html周围的引号:

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

记住outerHTML期待一个字符串。

答案 1 :(得分:0)

很遗憾没有,但我找到了一个代理解决方案,可以在我获得之前动态修改HTML。也适用: - )