在UIWebView中设置样式超链接

时间:2015-07-30 15:41:15

标签: javascript html ios css uiwebview

我有一个UIWebView显示一些包含链接的内容。 UIWebView会自动检测这些并突出显示/加下划线。有没有办法改变造型?我想选择一种不同的颜色/设置一些CSS来应用于所有链接。

我可以在加载时通​​过修改字符串来动态修改HTML但是能够通过JS更改它将是理想的,因为我已经在为字体做了这些(例如document.body.style.fontFamily = '我的字体')。

1 个答案:

答案 0 :(得分:2)

您可以使用简单的CSS标准规则设置页面内的链接的样式。要删除下划线并将链接的颜色更改为例如红色,请添加以下CSS样式:

a {
    text-decoration: none;
    color: red;
}

UIWebView有一些可以使用非标准CSS属性操作的特定样式。您可以找到完整列表here

如果您需要将此样式应用于您无法控制的HTML页面,则需要从原生Objective-C代码向目标页面注入JavaScript代码。

首先,让我们编写一个JavaScript代码,用<a>&#34; urlID&#34;来改变id元素的样式:

var link = window.document.getElementById('urlId');
link.style['text-decoration'] = 'none'; 
link.style.color = 'red';

然后,我们需要告诉本地UIWebView在网页加载完成时执行此JavaScript代码(这样我们确定我们正在搜索的DOM元素在那里)。 为此,我们可以使用UIWebView UIWebViewDelegate协议及其方法webViewDidFinishLoad:

 - (void)webViewDidFinishLoad:(UIWebView *)webView
{
    NSString *javaScriptCodeToExecute = @"var link = window.document.getElementById('urlId'); link.style['text-decoration'] = 'none'; link.style.color = 'red';";
    [_webView stringByEvaluatingJavaScriptFromString:javaScriptCodeToExecute];
}

我将JavaScript代码放在字符串变量javaScriptCodeToExecute中,然后告诉UIWebView使用stringByEvaluatingJavaScriptFromString:方法执行它。