如何将HTML元素添加到Cocoa Web视图

如何将HTML元素添加到Cocoa Web视图,cocoa,dom,webkit,Cocoa,Dom,Webkit,我一直在尝试将HTML内容添加到web视图中,但似乎没有得到任何结果。苹果的文档非常稀少,我发现的例子中,我似乎没有任何一个能正常工作。据我所知,这是它应该如何工作的,但事实并非如此 首先,我有一个非常简单的HTML文档,可以加载到webview中。我正在尝试向#container div添加一些HTML内容 <!DOCTYPE html> <html> <head> <meta charset="utf-8"/>

我一直在尝试将HTML内容添加到web视图中,但似乎没有得到任何结果。苹果的文档非常稀少,我发现的例子中,我似乎没有任何一个能正常工作。据我所知,这是它应该如何工作的,但事实并非如此

首先,我有一个非常简单的HTML文档,可以加载到webview中。我正在尝试向#container div添加一些HTML内容

<!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元素,考虑到这一点,应该是我尝试的第一件事。