如何以编程方式更改WebView中的文本属性?

时间:2010-12-31 10:45:32

标签: objective-c cocoa webkit

我需要在WebView中突出显示某些文本段。到目前为止,我一直在使用[webView stringByEvaluatingJavaScriptFromString:jscript]将javascript注入webview。 javascript在文本中添加了一个标记,我将背景颜色更改为黄色。这通常有效,但有时我会在插入标签时破坏html。我宁愿在WebView上使用 - (void)changeAttributes:(id)sender方法,据我所知,这将以不会破坏底层html的方式应用该样式。要做到这一点,我先打电话

[webView searchFor:aString direction:YES caseSensitive:NO wrap:YES];

在webview中设置选择。然后我打电话给

[webView changeAttributes:self];

当我将此消息发送到我的WebView实例时,它会调用此方法:

- (NSDictionary *)convertAttributes:(NSDictionary *)attributes {
   NSMutableDictionary *newAttrs = [[NSMutableDictionary alloc] initWithDictionary:attributes];
   NSColor *background = [NSColor yellowColor];
   [newAttrs setValue:background forKey:NSBackgroundColorAttributeName];
   return newAttrs;

}

哪个应该将所选文本的背景颜色更改为黄色,但不会。标准Cocoa文本属性是否适用于webview?这种方法是用于此目的,还是应该返回到javascript?

1 个答案:

答案 0 :(得分:0)

这些属性是NSFonts的属性。如this document中所述,事件的顺序通常如下:

  1. [text/webView changeAttributes:obj]已执行。通常由obj本身完成。
  2. text/webView使用obj将字体属性传递给[obj convertAttributes:...]
  3. obj会根据需要返回属性。
  4. text/webView相应地设置字体属性。
  5. 无论如何,我不会推荐这种方法。我假设你是在OS X上,而不是在iOS上。然后,我建议您使用WebFrame的{​​{3}}获取DOM元素并直接设置样式。