如何从 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

WKWebView 确实从本地文档文件夹加载资源

如何检查 WKWebView 是不是已加载 HTML 字符串

WKWebView 无法在 HTML 中加载本地资源

WKWebView 不加载第二个 CSS

在 WKWebView (iOS, Swift) 中使用本地 Javascript 源加载本地 HTML