Cocoa: WKWebView本地存储
Cocoa: WKWebView local storage
我正在尝试让本地存储与 WKWebView
一起使用。
我创建了一个 small demo project。这是一个 Mac 应用程序,显示 window 和一些按钮和 WKWebView
.
三个按钮显示同一页面的三个变体:Sticky Notes WebKit demo:
远程 加载 WKWebView
中的 Sticky Notes WebKit demo 页面。
Local 从应用程序包中的副本加载相同的内容。
Safari 在您的浏览器中加载 Sticky Notes WebKit demo。
前两个不行;后者确实如此。
应该会出现一个默认的便签,启用 新便签 按钮将添加新的便签。
在 Remote 和 Local 变体中,没有出现注释,New Note按钮被禁用,表明它无法访问本地存储。
我希望我只是在加载 WKWebView
时做错了什么,但这可能不受支持。
这是我的 远程 变体的代码:
WKWebViewConfiguration *config = [WKWebViewConfiguration new];
config.websiteDataStore = [WKWebsiteDataStore defaultDataStore];
self.webView = [[WKWebView alloc] initWithFrame:self.container.frame configuration:config];
self.webView.autoresizingMask = NSViewWidthSizable | NSViewHeightSizable;
[self.container addSubview:self.webView];
NSURL *url = [NSURL URLWithString:@"https://webkit.org/demos/sticky-notes/"];
NSURLRequest *request = [NSURLRequest requestWithURL:url];
[self.webView loadRequest:request];
非常感谢任何帮助!
更新:事实证明,虽然我使用的本地存储机制在 Safari 中有效,但在 WKWebView
中无效,但它比预期的要容易:只需使用 localStorage
JavaScript变量。
我正在尝试让本地存储与 WKWebView
一起使用。
我创建了一个 small demo project。这是一个 Mac 应用程序,显示 window 和一些按钮和 WKWebView
.
三个按钮显示同一页面的三个变体:Sticky Notes WebKit demo:
远程 加载
WKWebView
中的 Sticky Notes WebKit demo 页面。Local 从应用程序包中的副本加载相同的内容。
Safari 在您的浏览器中加载 Sticky Notes WebKit demo。
前两个不行;后者确实如此。
应该会出现一个默认的便签,启用 新便签 按钮将添加新的便签。
在 Remote 和 Local 变体中,没有出现注释,New Note按钮被禁用,表明它无法访问本地存储。
我希望我只是在加载 WKWebView
时做错了什么,但这可能不受支持。
这是我的 远程 变体的代码:
WKWebViewConfiguration *config = [WKWebViewConfiguration new];
config.websiteDataStore = [WKWebsiteDataStore defaultDataStore];
self.webView = [[WKWebView alloc] initWithFrame:self.container.frame configuration:config];
self.webView.autoresizingMask = NSViewWidthSizable | NSViewHeightSizable;
[self.container addSubview:self.webView];
NSURL *url = [NSURL URLWithString:@"https://webkit.org/demos/sticky-notes/"];
NSURLRequest *request = [NSURLRequest requestWithURL:url];
[self.webView loadRequest:request];
非常感谢任何帮助!
更新:事实证明,虽然我使用的本地存储机制在 Safari 中有效,但在 WKWebView
中无效,但它比预期的要容易:只需使用 localStorage
JavaScript变量。