如何从 WKWebView 加载本地化的 html 文件?
Posted
技术标签:
【中文标题】如何从 WKWebView 加载本地化的 html 文件?【英文标题】:How to load localized html file from WKWebView? 【发布时间】:2017-10-07 10:21:08 【问题描述】:我的第一个 *** 问题...
!!目标-C !!
我正在更新旧应用程序,并且正在处理帮助屏幕。 我选择通过一些 html 显示一些有用的操作方法,主要是为了便于格式化文本(项目符号、颜色、粗体、下划线等......)。 由于应用程序有点复杂,帮助屏幕总共有 3 个: 链接到其他 2 个详细页面的主要信息网页。
该应用已本地化为英语(基本)和法语。
一旦设置完成并且一切正常,我就继续本地化了基本的 html 文件。
现在,它们整齐地放置在 Base.lproj 和 fr.lproj 文件中。
但是当我从主 WebView 点击指向另一个页面的链接时,什么也没有发生!
有什么想法吗?
谢谢
以下是我正在使用的一些代码: 在 .h 文件中:
@interface howToViewController : UIViewController <WKUIDelegate>
WKWebView *infoText;
NSString *uRLString;
@property (nonatomic, retain) WKWebView *infoText;
在 .m 文件中:(必须以编程方式创建 WKWebView,因为通过 Storyboards 创建 WKWebView 时存在已知的 Xcode 9 错误)
- (void)viewDidLoad
[super viewDidLoad];
WKWebViewConfiguration *theConfiguration = [[WKWebViewConfiguration alloc] init];
WKWebView *aWebView = [[WKWebView alloc] initWithFrame:self.view.frame
configuration:theConfiguration];
aWebView.UIDelegate = self;
self.infoText = aWebView;
NSURL *url = [[NSBundle mainBundle] URLForResource:@"infoHTML" withExtension:@"html"];
NSString *html = [NSString stringWithContentsOfURL:url encoding:NSUTF8StringEncoding error:nil];
NSURL *baseUrl = [NSURL fileURLWithPath:[[NSBundle mainBundle] bundlePath]];
[infoText loadHTMLString:html baseURL:baseUrl];
[self.view addSubview:infoText];
在html文件中,文件本地化后不再起作用的链接:
<p>3/ More information is available for the respective tabs by pressing the following links :</p>
<ul><li><a href="pageOne.html">Limitations</a>
</li></ul>
<ul><li><a href="pageTwo.html">Fueling</a>
</li></ul>
【问题讨论】:
【参考方案1】:来自我的一个应用程序的工作代码。我正在使用 NSURLRequest 和 WKWebView 的 loadRequest 实例方法。我不确定您使用 loadHTMLString:baseURL: 出了什么问题,但我认为这可能与您为 baseURL 参数传递的值有关。您是否已清除控制台,然后单步执行该行代码以查看您是否在控制台中收到任何消息?
NSURL *url = [[NSBundle mainBundle] URLForResource: pageString withExtension: @"html"];
NSURLRequest *request = [NSURLRequest requestWithURL: url];
[webView loadRequest: request];
【讨论】:
感谢您对 CodeWriter23 的回复。试过了,但没有快乐:第 1 页或第 2 页的加载仍然不稳定... 有一些运气使用 href="Base.lproj/pageTwo.html">Fueling 或 href="fr.lproj/pageTwo.html ">加油但仍然非常不一致。最终使用视图顶部的按钮直接加载正确的 html... 回顾您的原始技术,您是否尝试将 baseURL 设置为本地化的捆绑文件夹? 是的,我有,受到其他两个线程的启发:***.com/questions/9001671/… 和 ***.com/questions/32448995/html-file-localization 但是,再次遇到不一致的行为......为了安全起见,我采取了另一种方法:顶部工具栏带有 3 个按钮:MAIN PAGE1 PAGE2,每个链接到一个操作:- (IBAction)mainButtonPushed:(id)sender NSURL *urlToLoad = [[NSBundle mainBundle] URLForResource:@"main" withExtension:@"html"]; NSString *html = [NSString stringWithContentsOfURL:urlToLoad encoding:NSUTF8StringEncoding error:nil]; NSURL *baseUrl = [NSURL fileURLWithPath:[[NSBundle mainBundle] bundlePath]]; [self.infoText loadHTMLString:html baseURL:baseUrl]; self.mainBarButton.tintColor = [UIColor kSelectedTint]; self.page1BarButton.tintColor = [UIColor kUnselectedTint]; self.page2BarButton.tintColor = [UIColor kUnselectedTint];
对此非常陌生...我想我应该在 Answer 中而不是在 Comment 中发布新代码...以上是关于如何从 WKWebView 加载本地化的 html 文件?的主要内容,如果未能解决你的问题,请参考以下文章
WKWebView 加载本地 HTML 需要 HTTPServer