gpt4 book ai didi

cocoa - 如何将 HTML 元素添加到 Cocoa Webview

转载 作者:行者123 更新时间:2023-12-03 17:05:31 25 4
gpt4 key购买 nike

我一直在尝试将 HTML 内容添加到 Web View ,但似乎无法获得任何结果。 Apple 文档非常稀疏,并且 few我发现的例子online ,我似乎无法让他们中的任何一个工作。据我所知,它应该是这样工作的,但事实并非如此。

首先,我有一个非常简单的 HTML 文档,我将其加载到 Web View 中。我正在尝试向 #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>

WebView 位于自定义 View 内。标题非常简单。

// NodeTest.h
#import <Cocoa/Cocoa.h>
#import <WebKit/WebKit.h>

@interface NodeTest : NSView
@property (nonatomic, retain) IBOutlet WebView *webview;
@end

因此,在 awakefromnib 中,我加载基本的 html 文档,尝试获取容器 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

将 HTML 内容加载到 WebView 中就可以了。一切都在那里。但我怎么也想不出如何添加新的 HTML 元素。如果有人有任何指示,我很想听听。这让我抓狂。

最佳答案

WebKit 异步加载请求,因此您需要在调用 -[WebFrame loadRequest:] 后旋转运行循环,直到加载完成,然后才尝试访问 DOM。旋转运行循环的常见方法是从 -awakeFromNib 返回,但如果需要,您也可以使用 NSRunLoop API 旋转嵌套运行循环。确定加载何时完成的标准方法是为 WebView 提供一个 WebFrameLoadDelegate 并等待其 -webView:didFinishLoadForFrame: 方法执行叫。 (如果您正在加载包含子帧的资源,您需要等到主框架传递给该方法。)

加载完成后,您列出的访问 -DOMDocument 等的代码应该可以正常工作。

关于cocoa - 如何将 HTML 元素添加到 Cocoa Webview,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9521957/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com