3

HTML ファイルを UIWebView にロードし、webViewDidFinishLoad で JavaScript を使用して「-webkit-column-width」および「-webkit-column-gap」スタイル プロパティを設定していますが、テキストが列にリフローしません。

- (void)viewDidLoad
{
    [super viewDidLoad];    
    NSURL *urlForView = [self.book.chapterURLs objectAtIndex:0];
    self.webView.delegate = self;
    self.webView.scrollView.bounces = NO;
    self.webView.scrollView.pagingEnabled = YES;
    [self.webView loadRequest:[NSURLRequest requestWithURL:urlForView]];
}

- (void) webViewDidFinishLoad:(UIWebView *)webView
{   
    NSString *jsString = @"document.getElementsByTagName('body')[0]. setAttribute('style','-webkit-column-width: 733px; -webkit-column-gap: 20px;');)";
    [self.webView stringByEvaluatingJavaScriptFromString:jsString];

}

スタイル属性が正しく設定されていることをアラートで確認したので、効果がない理由がわかりません。Safari のコンソールから同じ JavaScript 文字列を実行すると、望ましい効果が得られます。これがUIWebViewで機能しない理由は何ですか?

4

1 に答える 1

1

上記のコードが機能しない理由はまだわかりませんが、javascriptを介してファイルの外部スタイルシートを取得し、javascriptを介してそのCSSファイルを編集することで、回避策を見つけることができました。

NSString *varMySheet = @"var mySheet = document.styleSheets[0];";

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

NSString *insertRule1 = [NSString stringWithFormat:@"addCSSRule('html', 'padding: 0px; height: %fpx; -webkit-column-gap: 0px; -webkit-column-width: %fpx;')", webView.frame.size.height, webView.frame.size.width];
NSString *insertRule2 = [NSString stringWithFormat:@"addCSSRule('p', 'text-align: justify;')"];
//NSString *setTextSizeRule = [NSString stringWithFormat:@"addCSSRule('body', '-webkit-text-size-adjust: %d%%;')", currentTextSize];


[webView stringByEvaluatingJavaScriptFromString:varMySheet];

[webView stringByEvaluatingJavaScriptFromString:addCSSRule];

[webView stringByEvaluatingJavaScriptFromString:insertRule1];

[webView stringByEvaluatingJavaScriptFromString:insertRule2];

このコードを見つけたAePubReaderプロジェクトへのヒント。

于 2012-06-06T00:54:37.460 に答える