0

我遵循这个解决方案

如何在 iOS 中更改 ePub Book 的字体颜色和字体样式?

但是它不能正常工作。例如在这段 html

<body>
<div id="HolubiPosta-E-2.html" xml:lang="cs-CZ">
<div class="Z-kladn--grafick--r-me-ek">
  <p class="Nazev para-style-override-3" id="toc_marker-2">Holubí pošta</p>

  <p class="Z-kladn--odstavec para-style-override-4"><span>Už od rána slunce sypalo hlava nehlava zlato.</span></p>

它会更改第二段中的字体,但不会更改第一段中的字体。

如何正确更改所有 html 文档中的字体系列?

编辑:这是我正在使用的 css 添加功能

NSString *addCSSRule =  @"function addCSSRule(selector, newRule) {"
"if (mySheet.addRule) {"
"mySheet.addRule(selector, newRule);"                               // For Internet Explorer
"} else {"
"ruleIndex = mySheet.cssRules.length;"
"mySheet.insertRule(selector + '{' + newRule + ';}', ruleIndex);"   // For Firefox, Chrome, etc.
"}"
"}";

这就是我所说的:

NSString *setTextFont = [NSString stringWithFormat:@"addCSSRule('html, body, div, p, span, a', 'font-family: %@;')", m_str_font_name];

[webView stringByEvaluatingJavaScriptFromString:setTextFont];

CSS:

p.Nazev {
font-family : "Liberation Serif", serif;
font-weight : normal;
font-style : normal;
font-size : 1.33em;
text-decoration : none;
font-variant : normal;
line-height : 1.2;
text-align : center;
color : #0000ff;
text-indent : 0px;
margin : 0px;}

p.para-style-override-3 {
margin-bottom : 28px;
margin-top : 28px;}

p.para-style-override-4 {
text-align : justify;}

div.Z-kladn--grafick--r-me-ek {}
4

1 回答 1

1

这是一种方法。我可以确认它适用于 iOS UIWebView。将“serif”替换为font-family您想要的任何内容。

[self.contentView stringByEvaluatingJavaScriptFromString:
             @"var styleSheets = document.styleSheets;for( i=0; i < styleSheets.length; i++ ){for( j=0; j < styleSheets[i].cssRules.length; j++){var rule = styleSheets[i].cssRules[j]; rule.style['font-family'] = 'serif'}}"];

不是最优雅的方式,但基本上它遍历所有现有规则并设置字体系列。

我猜你的问题是因为你添加的新元素级规则被 epub css 中定义的一些现有类级规则覆盖。

于 2013-07-03T12:03:31.407 回答