【问题标题】:iPhone ePub Reader Change font of all pages in ePub book not current webview contentsiPhone ePub 阅读器更改 ePub 书中所有页面的字体而不是当前的 webview 内容
【发布时间】:2013-07-03 03:39:22
【问题描述】:

我正在开发像 ibook 应用程序这样的 iphone 应用程序。我加载了在解析 UIWebView 中的 epub 文件后得到的 XML 文件的内容。我更改了 UIWebView.I 的字体大小和字体系列内容想要更改 ePub book 中所有页面的字体大小和字体系列。如何存储 UIWebView 的设置,以便将其应用于 EPub book 中的所有页面。 这是我如何更改 weview 字体的代码。

NSString *yourHTMLSourceCodeString = [App_delegate.webView stringByEvaluatingJavaScriptFromString:@"document.body.innerHTML"];

[App_delegate.webView loadHTMLString:[NSString stringWithFormat:@"<div style=' font-family:Times New Roman;'>%@",yourHTMLSourceCodeString] baseURL:nil];

【问题讨论】:

    标签: iphone ios webview


    【解决方案1】:

    检查这个项目https://github.com/fedefrappi/AePubReader。您可以简单地将 fontName 和 fontSize 值存储在 NSUserDefaults 中,并在 webView 委托方法 webViewDidFinishLoad 中添加 CSS 规则:

    - (void)webViewDidFinishLoad:(UIWebView *)theWebView{
    
        NSString *fontName = [[NSUserDefault standartUserDefaults] objectForKey:@"fontName"];
        NSNumber *currentTextSize = [[NSUserDefault standartUserDefaults] objectForKey:@"currentTextSize"];
    
        NSString *varMySheet = @"var mySheet = document.styleSheets[0];";
    
        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 *setTextSizeRule = [NSString stringWithFormat:@"addCSSRule('body', '-webkit-text-size-adjust: %d%%;')", [currentTextSize floatValue]];
        NSString *setFont = [NSString stringWithFormat:@"addCSSRule('body', 'font-family:%@;')", fontName];
    
    
        [theWebView stringByEvaluatingJavaScriptFromString:varMySheet];
    
        [theWebView stringByEvaluatingJavaScriptFromString:addCSSRule];
    
        [theWebView stringByEvaluatingJavaScriptFromString:setTextSizeRule];
    
        [theWebView stringByEvaluatingJavaScriptFromString:setFont];
    }
    

    【讨论】:

    • 感谢您提及项目名称“AePubReader”。这对我帮助很大。
    【解决方案2】:

    虽然帖子太旧了,上面的回答对我帮助很大,但我在 Swift 中这样做时遇到了问题。所以,也许这个答案可以节省一些人的时间。

    let varMySheet = "var mySheet = document.styleSheets[0];"
    
    let addCSSRule = "function addCSSRule(selector, newRule) {if (mySheet.addRule) {mySheet.addRule(selector, newRule);} else { ruleIndex = mySheet.cssRules.length;mySheet.insertRule(selector + '{' + newRule + ';}', ruleIndex);}}"
    
    let setTextSizeRule = "addCSSRule('body', '-webkit-text-size-adjust: \(fontPercentage)%;')"
    
    
    self.webView.stringByEvaluatingJavaScriptFromString(varMySheet)
    self.webView.stringByEvaluatingJavaScriptFromString(addCSSRule)
    self.webView.stringByEvaluatingJavaScriptFromString(setTextSizeRule)
    

    fontPercentage 是我班级中的一个变量。默认值为 100,您可以增加/减少它。

    为了简单地更新 fontSize,我使用了“-webkit-text-size-adjust”属性。下面这段代码就足够了:

    let textSizeRule = "document.getElementsByTagName('body')[0].style.webkitTextSizeAdjust= '\(fontPercentage)%'"
    self.webView.stringByEvaluatingJavaScriptFromString(textSizeRule)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2022-06-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多