2012-03-01 17 views
1

WebコンテンツにHTMLコンテンツを追加しようとしましたが、結果が得られないようです。アップルのドキュメントは非常に疎で、fewの例のうち、私が見つけたのはonlineなので、私はそれらのどれも働かないようです。私が知る限り、これはどのように動作するはずですが、そうではありません。Cocoa WebviewにHTML要素を追加する方法

開始するには、非常にシンプルなHTML文書をWebビューに読み込みます。 #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はカスタムビューの中にあります。ヘッダーはとてもまっすぐです。

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

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

だから、awakefromnibに、私は、コンテナのdivを取得し、クラス名「テスト」で、その中に新しいHTML要素を挿入しようとする基本的なHTMLドキュメントをロードします。どの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要素を追加する方法を理解できません。もし誰かがポインタを持っていれば、私はそれらを聞くのが大好きです。これは私を怒らせる。

答えて

2

WebKitは要求を非同期にロードするため、ロードが完了するまで-[WebFrame loadRequest:]を呼び出した後に実行ループを回転させ、DOMにアクセスしようとする必要があります。実行ループを回転させる一般的な方法は、-awakeFromNibから戻るだけですが、必要に応じてNSRunLoop APIを使用して入れ子にされた実行ループを回転させることもできます。読み込みが完了したときの標準的な方法は、WebViewWebFrameLoadDelegateを与え、その-webView:didFinishLoadForFrame:メソッドが呼び出されるまで待つことです。 (メインフレームがそのメソッドに渡されるまで待機する必要のあるサブフレームを含むリソースをロードする場合)メインフレームがそのメソッドに渡されるまで待つことをお勧めします。

ロードが完了すると、-DOMDocumentなどちょうど良い。

+0

ありがとう、ありがとう。私は簡単なルートを使い、HTML要素を作成するためのボタンを追加しました。これについて考えてみると、私が試した最初のものの1つであったはずです。 – gargantuan

関連する問題