Я внедряю java-скрипт в webviewkit, чтобы позволить пользователю извлекать изображения с веб-сайтов при нажатии длинным кликом, поэтому моя проблема заключается в том, что некоторые веб-сайты не реагируют на внедрение javascript, но большинство веб-сайтов реагируют идеально.Я надеюсь, что один из вас прошел с той же проблемой.любая помощь приветствуется.благодарю вас !это мой код:
private func initializeWebView() {
webView.navigationDelegate = self
let newJavascript = "window.onload = function() {
if (document.addEventListener){
document.addEventListener("click", function(evt) {
var tagClicked = document.elementFromPoint(evt.pageX - window.pageXOffset, evt.pageY - window.pageYOffset);
window.webkit.messageHandlers.jsMessenger.postMessage(tagClicked.outerHTML.toString());
});
}
else if (document.attachEvent){
document.attachEvent("onclick", function(evt) {
var tagClicked = document.elementFromPoint(evt.pageX - window.pageXOffset, evt.pageY - window.pageYOffset);
window.webkit.messageHandlers.jsMessenger.postMessage(tagClicked.innerHTML.toString());
});
}
document.body.style.webkitTouchCallout='none';
document.body.style.webkitUserSelect='none';
document.body.style.pointerEvents='auto';
};"
window.onload = function() {
if (document.addEventListener){
document.addEventListener("click", function(evt) {
var tagClicked = document.elementFromPoint(evt.pageX - window.pageXOffset, evt.pageY - window.pageYOffset);
window.webkit.messageHandlers.jsMessenger.postMessage(tagClicked.outerHTML.toString());
});
}
else if (document.attachEvent){
document.attachEvent("onclick", function(evt) {
var tagClicked = document.elementFromPoint(evt.pageX - window.pageXOffset, evt.pageY - window.pageYOffset);
window.webkit.messageHandlers.jsMessenger.postMessage(tagClicked.innerHTML.toString());
});
}
document.body.style.webkitTouchCallout='none';
document.body.style.webkitUserSelect='none';
document.body.style.pointerEvents='auto';
};
let userScript = WKUserScript.init(source: newJavascript,
injectionTime: .atDocumentEnd , forMainFrameOnly: false)
webView.configuration.userContentController.addUserScript(userScript)
webView.configuration.userContentController.add(self, name: "jsMessenger")
longGesture = UILongPressGestureRecognizer(target: self, action: #selector(WebViewController.longPress(_:)))
longGesture.minimumPressDuration = 1
longGesture.delegate = self
// let clickGesture=UipresG
self.webView.scrollView.addGestureRecognizer(longGesture)
let tapGesture = UITapGestureRecognizer(target: self, action: #selector(viewTap) )
tapGesture.delegate = self
self.webView.scrollView.addGestureRecognizer(tapGesture)
tapGesture.delegate = self
webView.addGestureRecognizer(tapGesture)
}
private func loadData() {
let request = URLRequest(url: url)
webView.load(URLRequest.init(url: url))
}
func userContentController(_ userContentController: WKUserContentController, didReceive message: WKScriptMessage) {
print(message.body)
let html: String = message.body as! String
do{
let doc: Document = try SwiftSoup.parse(html)
if(html.contains("img")){
var link: Element = try doc.select("img").first()!
contentInfo=message.body as! String
var linkHref: String = try link.attr("src")
if linkHref.contains("https://www.google.com") {
linkHref=String(linkHref.dropFirst(22))
linkHref="http:"+linkHref
} else {
linkHref = String(format: "%@%@", (self.url.absoluteString), linkHref)
}
if (linkHref.contains("https://www.google.com")) {
linkHref=String(linkHref.dropFirst(22))
if(!linkHref.contains("http")){
linkHref="http:"+linkHref
}
}
self.itemImgUrl=linkHref
}
}catch{
}
}