2017-09-19 7 views
2

変更divのinnerHTMLのIHTMLDocument2を通って、私はIHTMLDocument2インターフェイスをこのように使用してdiv要素の内容を変更しようとしているC++

IHTMLElementCollection* collection = NULL; 
    IDispatch* mydiv; 

    doc2->get_all(&collection); 
    long count; 
    collection->get_length(&count);  //just to check I get something 

    CComVariant varstr = L"mydivname"; 
    CComVariant varint = 0; 
    collection->item(varstr, varint, &mydiv); //this works I get the div 
    IHTMLElement* htmldiv; 
    mydiv->QueryInterface(IID_IHTMLElement, (void**)&htmldiv); 

    CComBSTR html; 
    htmldiv->get_innerHTML(&html);  //works too, I get the current content 

    HRESULT hr=htmldiv->put_innerText(L"hello");  //this does not work but returns S_OK 

    collection->Release(); 

だから私のdiv要素の内容は、単にクリアされ、「こんにちは」に置き換えられていませんが私はなぜそれがセキュリティ上の問題になるのか理解できません。

おかげで

答えて

0

MSDN documentationによると、put_innerTextに渡された文字列は、タイプBSTRです。

だから、私はこのようないくつかのコードをしようと示唆している:

CComBSTR text(OLESTR("hello")); 
hr = htmldiv->put_innerText(text); 
+0

確かに、愚かな間違いは、あなたに感謝! – Entretoize

+0

問題ありません。喜んで助けになる。 "トリッキーな"部分は、BSTR文字列の代わりに普通のwchar_t文字列を渡すと、コンパイル時エラーが出ないということです(BSTRのtypedef定義を考慮して、コンパイラの観点からは意味があります:) –

関連する問題