Mat*_*t.M 10 interface-builder uiwebview ios wkwebview
在iOS 11中,Apple在你的笔尖和故事板上添加了添加WKWebViews插座的功能集.当使用自动设置的默认WKWebViewConfiguration时,它似乎工作正常.
但是,我希望能够使用自定义WKWebViewConfiguration.无论如何我可以在之前,或者从nib初始化WKWebView之后设置它吗?
由于 WKWebView 的配置属性是只读的,因此无法通过 WKWebView 的出口从 storyboard 中设置 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!)
}
Run Code Online (Sandbox Code Playgroud)
并实现WKScriptMessageHandler委托方法
func userContentController(_ userContentController: WKUserContentController, didReceive message: WKScriptMessage) {
if (message.name == "callbackHandler"){
print("\(message.body)")
}
}
Run Code Online (Sandbox Code Playgroud)
希望这可以帮助...
让我们以您的自定义配置为例。
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;
Run Code Online (Sandbox Code Playgroud)
是的!!!我们可以从 Nib 或 Storyboard 在 WKWebView 上设置 WKWebViewConfiguration 我为此使用以下代码:
这是我的 IBOutlet--
@IBOutlet var webViewChat: WKWebView!
Run Code Online (Sandbox Code Playgroud)
//使用下面的代码你可以设置配置
webViewChat.configuration.userContentController.add(self, name: "edit")
webViewChat.configuration.userContentController.add(self, name: "remove")
Run Code Online (Sandbox Code Playgroud)
注意: 确保在设置配置后加载 URL
您可以在Storyboard中创建WKWebView,然后WKUIDelegate:createWebViewWith仅通过配置即可用于创建新的WKWebView。
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)
}
}
Run Code Online (Sandbox Code Playgroud)
我的回答并不能解决每个人的问题,但请务必检查 Storyboard 中 WKWebView 的属性检查器,看看是否可以在那里设置您想要对配置进行的更改。
我只是花了一个小时试图在代码中解决这个问题,当时我所要做的就是选中属性检查器中的 2 个框。
| 归档时间: |
|
| 查看次数: |
8360 次 |
| 最近记录: |