UIWebView字符串ByEvaluatingJavaScriptFromString将标记与其他标记换行



假设我有一个这样的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>

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

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

有人能告诉我我在这里做错了什么吗?我真的不能使用jQuery或任何其他框架,因为代码应该从第三方获得HTML表单,他们不必使用jQuery之类的东西。

您只是缺少新html:周围的引号

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

请记住outerHTML需要一个字符串。

很遗憾没有,但我找到了一个带有代理的解决方案,可以在得到HTML之前即时修改它。同样有效:-)

最新更新