如何将HTML元素添加到Cocoa Web视图
我一直在尝试将HTML内容添加到web视图中,但似乎没有得到任何结果。苹果的文档非常稀少,我发现的例子中,我似乎没有任何一个能正常工作。据我所知,这是它应该如何工作的,但事实并非如此 首先,我有一个非常简单的HTML文档,可以加载到webview中。我正在尝试向#container div添加一些HTML内容如何将HTML元素添加到Cocoa Web视图,cocoa,dom,webkit,Cocoa,Dom,Webkit,我一直在尝试将HTML内容添加到web视图中,但似乎没有得到任何结果。苹果的文档非常稀少,我发现的例子中,我似乎没有任何一个能正常工作。据我所知,这是它应该如何工作的,但事实并非如此 首先,我有一个非常简单的HTML文档,可以加载到webview中。我正在尝试向#container div添加一些HTML内容 <!DOCTYPE html> <html> <head> <meta charset="utf-8"/>
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8"/>
<title>HTML TEST</title>
<style type="text/css">
.test {
display: block;
border: #000 1px solid;
width: 100px;
height: 100px;
background-color: #0F0;
}
</style>
</head>
<body>
<p>hello world</p>
<div id="container"></div>
</body>
</html>
HTML测试
.测试{
显示:块;
边框:#000 1px实心;
宽度:100px;
高度:100px;
背景色:#0F0;
}
你好,世界
WebView位于自定义视图中。头球非常直
// NodeTest.h
#import <Cocoa/Cocoa.h>
#import <WebKit/WebKit.h>
@interface NodeTest : NSView
@property (nonatomic, retain) IBOutlet WebView *webview;
@end
//NodeTest.h
#进口
#进口
@接口节点测试:NSView
@属性(非原子,保留)IBOutlet WebView*WebView;
@结束
因此,在awakefromnib中,我加载基本的html文档,尝试获取container div并在其中插入一个新的html元素,类名为“test”。根据HTML文件,它应该有一个黑色边框,绿色填充,并且应该是100x100px
#import "NodeTest.h"
@implementation NodeTest
@synthesize webview;
- (id)initWithFrame:(NSRect)frame
{
self = [super initWithFrame:frame];
if (self) {
// Initialization code here.
}
return self;
}
- (void) awakeFromNib {
// Load the HTML document into the webview
NSURL *url = [NSURL fileURLWithPath:[[NSBundle mainBundle] pathForResource:@"TestDocument" ofType:@"html"]];
NSURLRequest *req = [NSURLRequest requestWithURL:url];
[[webview mainFrame] loadRequest:req];
[webview setEditable:YES];
DOMDocument *domDoc = [[webview mainFrame] DOMDocument];
// Get the container div. I've tried this with and without '#'
DOMHTMLElement *container = (DOMHTMLElement *)[domDoc getElementById:@"container"];
// Create a new HTML element
DOMHTMLElement *myDiv = (DOMHTMLElement *)[domDoc createElement:@"div"];
[myDiv setInnerHTML:@"<p>Boo!</p>"];
[myDiv setClassName:@"test"];
// Add the element to the container div
[container appendChild:myDiv];
[webview setNeedsDisplay:YES];
}
- (void)drawRect:(NSRect)dirtyRect
{
// Drawing code here.
}
@end
#导入“NodeTest.h”
@实现节点测试
@综合网络视图;
-(id)initWithFrame:(NSRect)帧
{
self=[super initWithFrame:frame];
如果(自我){
//这里是初始化代码。
}
回归自我;
}
-(无效)从NIB中唤醒{
//将HTML文档加载到webview中
NSURL*url=[NSURL fileURLWithPath:[[NSBundle mainBundle]pathForResource:@“html”类型的“TestDocument”;
NSURLRequest*req=[nsurlRequestRequestWithURL:url];
[[webview大型机]加载请求:请求];
[网络视图设置可编辑:是];
DOMDocument*domDoc=[[webview大型机]DOMDocument];
//去拿集装箱舱。我试过这个有没有带“#”
DOMHTMLElement*容器=(DOMHTMLElement*)[domDoc getElementById:@“容器”];
//创建一个新的HTML元素
DOMHTMLElement*myDiv=(DOMHTMLElement*)[domDoc createElement:@“div”];
[myDiv setInnerHTML:@“Boo!”;
[myDiv setClassName:@“测试”];
//将元素添加到容器div
[子对象:myDiv];
[网络视图设置需要显示:是];
}
-(void)drawRect:(NSRect)dirtyRect
{
//这里是绘图代码。
}
@结束
将HTML内容加载到WebView是可以的。都在那里。但我一辈子都搞不懂如何添加新的HTML元素。如果有人有什么建议,我很想听听。这让我快发疯了 WebKit异步加载请求,因此您需要在调用
-[WebFrame loadRequest://code>后旋转运行循环,直到加载完成,然后才尝试访问DOM。旋转运行循环的常用方法只是从-awakeFromNib
返回,但如果需要,还可以使用nsrunlop
API旋转嵌套的运行循环。确定加载何时完成的标准方法是给WebView
一个WebFrameLoadDelegate
,并等待调用其-WebView:didfishloadforframe:
方法。(如果正在加载包含子帧的资源,则需要等待主帧传递给该方法。)
加载完成后,您列出的访问-DOMDocument
等的代码应该可以正常工作。非常好,谢谢。我采用了简单的方法,只添加了一个按钮来创建HTML元素,考虑到这一点,应该是我尝试的第一件事。