Ios 为什么';通过javascript设置列宽和间距后的UIWebView回流文本?

Ios 为什么';通过javascript设置列宽和间距后的UIWebView回流文本?,ios,css,uiwebview,uiwebviewdelegate,Ios,Css,Uiwebview,Uiwebviewdelegate,我正在将一个html文件加载到UIWebView中,并通过webViewDidFinishLoad中的javascript设置“-webkit column width”和“-webkit column gap”样式属性,但文本不会回流到列中 - (void)viewDidLoad { [super viewDidLoad]; NSURL *urlForView = [self.book.chapterURLs objectAtIndex:0]; self.web

我正在将一个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中不起作用吗?

我仍然不明白上面的代码为什么不起作用,但我找到了一个解决办法,通过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];

帽子尖指向我找到这段代码的地方。

在加载dom和页面之后,您将设置它们。设置这些属性的行为是否会自动导致它们应用于已加载的页面?是的,我认为在页面加载后设置这些属性应该有效。或者,更准确地说,我不知道为什么它不起作用,我已经证实它在Chrome和Safari上起作用。