在iOS 11中,苹果增加了在笔尖和故事板上添加WKWebView插座的能力集。当使用自动设置的默认WKWebView配置时,它似乎工作得很好。然而,我希望能够使用自定义的WKWebViewConfiguration。有没有什么方法可以在WKWebView从笔尖初始化之前或之后设置它?
63lcw9qa1#
让我们举例说明您的自定义配置。
NSString *jScript = @"var meta = document.createElement('meta'); meta.setAttribute('name', 'viewport'); meta.setAttribute('content', 'width=device-width'); document.getElementsByTagName('head')[0].appendChild(meta);"; WKUserScript *wkUScript = [[WKUserScript alloc] initWithSource:jScript injectionTime:WKUserScriptInjectionTimeAtDocumentEnd forMainFrameOnly:YES]; //Here you can customize configuration [self.webView.configuration.userContentController addUserScript:wkUScript]; // self.webView.navigationDelegate = self; // self.webView.contentMode = UIViewContentModeScaleAspectFill;
d7v8vwbk2#
您可以在Storyboard中创建WKWebView,然后使用WKUIDelegate:createWebViewWith创建新的WKWebView(仅使用配置)。
WKUIDelegate:createWebViewWith
class WindowViewController: UIViewController { // The WKWebView created from storyboard @IBOutlet var webView: WKWebView! override func viewDidLoad() { // Delegate the webview's uiDelegate self.webView.uiDelegate = self } } extension WindowViewController: WKUIDelegate { func webView(_ webView: WKWebView, createWebViewWith configuration: WKWebViewConfiguration, for navigationAction: WKNavigationAction, windowFeatures: WKWindowFeatures) -> WKWebView? { // Create new WKWebView with custom configuration here let configuration = WKWebViewConfiguration() return WKWebView(frame: webView.frame, configuration: configuration) } }
t2a7ltrp3#
是的!!!我们可以设置WKWebViewConfiguration的WKWebView从笔尖或故事板我使用下面的代码:这是我的IBOutlet--
@IBOutlet var webViewChat: WKWebView!
//使用下面的代码可以设置配置
webViewChat.configuration.userContentController.add(self, name: "edit") webViewChat.configuration.userContentController.add(self, name: "remove")
**注意:**确保在设置配置后加载URL
j0pj023g4#
由于WKWebView的配置属性是只读的,因此无法通过WKWebView的出口从故事板中设置WKWebView的配置,相反,我们需要按如下所示进行编程配置。
class ViewController: UIViewController, WKScriptMessageHandler { @IBOutlet weak var webContentView: UIView! var webView: WKWebView? let contentController = WKUserContentController() contentController.add(self, name: "callbackHandler") let configuration = WKWebViewConfiguration() configuration.userContentController = contentController self.webView = WKWebView(frame: self.webContentView.bounds, configuration: configuration) self.webContentView.addSubview(self.webView!) }
并实现WKScriptMessageHandler委托方法
func userContentController(_ userContentController: WKUserContentController, didReceive message: WKScriptMessage) { if (message.name == "callbackHandler"){ print("\(message.body)") } }
希望这能帮上忙...
dddzy1tm5#
我的答案并不能解决所有人的问题,但是一定要检查情节提要中的WKWebView的属性检查器,看看是否可以在那里设置您想要对配置进行的更改。我刚刚花了一个小时试图用代码来解决这个问题,当时我所要做的就是在属性检查器中选中2个框。
nr7wwzry6#
对于目标C:
WKWebViewConfiguration *config = _webView.configuration; WKUserContentController* ctrl = [[WKUserContentController alloc] init]; [ctrl addScriptMessageHandler:self name:@"method1"]; [ctrl addScriptMessageHandler:self name:@"method2"]; // others ... config.userContentController = ctrl;
并添加WKScriptMessageHandler的实现:
- (void)userContentController:(WKUserContentController *)userContentController didReceiveScriptMessage:(WKScriptMessage *)message{ NSLog(@"userContentController:didReceiveScriptMessage: message=%@", message); if ([message.name isEqualToString:@"method1"] && message.body // &&[message.body isKindOfClass:[NSString class]] ) { // do something } else if ([message.name isEqualToString:@"method2"] && message.body ) { // do something } }
6条答案
按热度按时间63lcw9qa1#
让我们举例说明您的自定义配置。
d7v8vwbk2#
您可以在Storyboard中创建WKWebView,然后使用
WKUIDelegate:createWebViewWith
创建新的WKWebView(仅使用配置)。t2a7ltrp3#
是的!!!我们可以设置WKWebViewConfiguration的WKWebView从笔尖或故事板我使用下面的代码:
这是我的IBOutlet--
//使用下面的代码可以设置配置
**注意:**确保在设置配置后加载URL
j0pj023g4#
由于WKWebView的配置属性是只读的,因此无法通过WKWebView的出口从故事板中设置WKWebView的配置,相反,我们需要按如下所示进行编程配置。
并实现WKScriptMessageHandler委托方法
希望这能帮上忙...
dddzy1tm5#
我的答案并不能解决所有人的问题,但是一定要检查情节提要中的WKWebView的属性检查器,看看是否可以在那里设置您想要对配置进行的更改。
我刚刚花了一个小时试图用代码来解决这个问题,当时我所要做的就是在属性检查器中选中2个框。
nr7wwzry6#
对于目标C:
并添加WKScriptMessageHandler的实现: