我有一个WebView从Internet上加载页面.我想显示一个ProgressBar直到加载完成.
我如何监听完成页面加载WebView?
我有一个函数,我想在加载页面内容后调用.我读到了$ viewContentLoaded,它对我不起作用.我正在寻找类似的东西
document.addEventListener('DOMContentLoaded', function () {
//Content goes here
}, false);
Run Code Online (Sandbox Code Playgroud)
以上调用在AngularJs控制器中对我不起作用.
目标:在网站加载完成后截取WKWebView的截图
采用的方法:
创建了一个名为screen capture()的扩展方法,它获取了WKWebView的图像
使我的UIViewController实现WKNavigationDelegate
设置wkwebview.navigationDelegate = self(在UIViewController init中)
在UIViewcontroller中实现didFinishNavigation委托func,为WKWebView调用屏幕捕获扩展方法
Run Code Online (Sandbox Code Playgroud)func webView(webView: WKWebView, didFinishNavigation navigation: WKNavigation!) { let img = webView.screenCapture() }
问题:
我在这里错过了什么?我查看了WKWebView的所有可能的委托函数,没有其他任何东西似乎代表WKWebView中内容加载的完成.如果有解决方法,将不胜感激
更新:添加我用于截取Web视图截屏的截图代码
class func captureEntireUIWebViewImage(webView: WKWebView) -> UIImage? {
var webViewFrame = webView.scrollView.frame
if (webView.scrollView.contentSize != CGSize(width: 0,height: 0)){
webView.scrollView.frame = CGRectMake(webViewFrame.origin.x, webViewFrame.origin.y, webView.scrollView.contentSize.width, webView.scrollView.contentSize.height)
UIGraphicsBeginImageContextWithOptions(webView.scrollView.contentSize, webView.scrollView.opaque, 0)
webView.scrollView.layer.renderInContext(UIGraphicsGetCurrentContext())
var image:UIImage = UIGraphicsGetImageFromCurrentImageContext()
UIGraphicsEndImageContext()
webView.scrollView.frame = webViewFrame
return image
}
return nil
}
Run Code Online (Sandbox Code Playgroud) 有没有办法检查给定选择器/元素的HTML DOM元素是否已准备好使用jQuery或JavaScript?
查看jQuery api的ready函数,看起来它只能与文档对象一起使用.如果准备好不能用于此目的还有另一种方法吗?
例如
$('h1').ready(function()
{
//do something when all h1 elements are ready
});
Run Code Online (Sandbox Code Playgroud)
显然我可以使用
$(document).ready(function()
{
//do something when all h1 elements are ready
});
Run Code Online (Sandbox Code Playgroud)
但是如果首先加载所有h1,那么特定于h1元素的代码将仅在整个文档准备好之后执行,即使它实际上可以更早地执行.
我试图让我的javascript与swift代码交互但不幸的是我没有成功.
目前,我只是尝试更改标题颜色并显示一条消息,就像您将在下面的代码中看到的那样.
这是我的(index.html)代码:
<!DOCTYPE html>
<html>
<head>
<title>Test</title>
<meta charset="UTF-8">
</head>
<body>
<h1>WebView Test</h1>
<script type="text/javascript" src="main.js"></script>
</body>
</html>
Run Code Online (Sandbox Code Playgroud)
这是我的(main.js -JavaScript)代码:
function callNativeApp () {
try {
webkit.messageHandlers.callbackHandler.postMessage("Send from JavaScript");
} catch(err) {
console.log('error');
}
}
setTimeout(function () {
callNativeApp();
}, 5000);
function redHeader() {
document.querySelector('h1').style.color = "red";
}
Run Code Online (Sandbox Code Playgroud)
这是我的(ViewController.swift)代码:
import UIKit
import WebKit
class ViewController: UIViewController, WKScriptMessageHandler {
@IBOutlet var containerView : UIView! = nil
var webView: WKWebView?
override func loadView() {
super.loadView() …Run Code Online (Sandbox Code Playgroud) 我的javascript文件中有以下内容:
var divId = "divIDer";
jQuery(divId).ready(function() {
createGrid(); //Adds a grid to the html
});
Run Code Online (Sandbox Code Playgroud)
html看起来像:
<div id="divIDer"><div>
Run Code Online (Sandbox Code Playgroud)
但有时我的divGrid函数会在我的divIder实际加载到页面之前被调用.那么当我尝试渲染我的网格时,它找不到适当的div来指向并且不会渲染.在我的div完全准备好使用之后,如何调用函数?
编辑:
我正在使用Extjs加载div:
var tpl = new Ext.XTemplate(
'<div id="{divId}"></div>');
tpl.apply({
});
Run Code Online (Sandbox Code Playgroud) 我正在使用jQuery JavaScript库.我喜欢的事件监听器准备好上$(document)时DOM设置将触发.
(非常类似于.onload但没有外部源)
我会发现它非常有用,如果有一个事件监听器与此行为非常相似,但在元素完全加载时触发.(fe:图片,文字内容极长的Div,如此)
我很欣赏jQuery或JavaScript方法.