gpt4 book ai didi

javascript - 使用 JavaScript 将 CSS 注入(inject) UIWebView

转载 作者:可可西里 更新时间:2023-11-01 04:24:02 25 4
gpt4 key购买 nike

我正在尝试注入(inject)一个本地 CSS 文件来覆盖网页的样式。该网页显示在 iOS 中的 UIWebView 容器中。但是我无法让我的代码工作。请参阅下面我的委托(delegate)方法的片段。此代码运行(我可以看到 NSLog 消息)但我没有在页面上看到它的执行结果。

我知道这不可能是我编写的 CSS,因为在这种情况下,我使用了页面自己的 CSS 文件并简单地更改了一些颜色。 (为了测试这个方法)

-(void)webViewDidFinishLoad:(UIWebView *)webView 
{
NSString *path = [[NSBundle mainBundle] bundlePath];
NSString *cssPath = [path stringByAppendingPathComponent:@"reader.css"];
NSString *js = [NSString stringWithFormat:@"var headID = document.getElementsByTagName('head')[0];var cssNode = document.createElement('link');cssNode.type = 'text/css';cssNode.rel = 'stylesheet';cssNode.href = '%@';cssNode.media = 'screen';headID.appendChild(cssNode);", cssPath];
[webView stringByEvaluatingJavaScriptFromString:js];
NSLog(@"webViewDidFinishLoad Executed");
}

最佳答案

你的解决方案不会奏效,因为

  1. 你的 cssNode.href应该是一个 URL(即转义并以 file:// 为前缀),而不是路径
  2. Safari 不允许您从远程页面加载本地文件,因为这存在安全风险。

在过去,我通过使用 NSURLConnection 下载 HTML,然后添加 <style> 来完成此操作。标记在 HTML 头部。像这样的东西:

NSString *pathToiOSCss = [[NSBundle mainBundle] pathForResource:@"reader" ofType:@"css"];
NSString *iOSCssData = [NSString stringWithContentsOfFile:pathToiOSCss encoding:NSUTF8StringEncoding error:NULL];
NSString *extraHeadTags = [NSString stringWithFormat:@"<style>%@</style></head>", iOSCssData];
html = [uneditedHtml stringByReplacingOccurrencesOfString:@"</head>" withString:extraHeadTags];

[webView loadHTMLString:html baseURL:url];

关于javascript - 使用 JavaScript 将 CSS 注入(inject) UIWebView,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8793726/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com