diff --git a/direct/src/plugin_activex/P3DActiveXCtrl.cpp b/direct/src/plugin_activex/P3DActiveXCtrl.cpp index 91be8a99e0..1ec6f39241 100644 --- a/direct/src/plugin_activex/P3DActiveXCtrl.cpp +++ b/direct/src/plugin_activex/P3DActiveXCtrl.cpp @@ -308,6 +308,46 @@ int CP3DActiveXCtrl::OnCreate(LPCREATESTRUCT lpCreateStruct) ::SysFreeString( url ); + CComPtr pHtmlElementCollect; + hr = pHtml2Doc->get_scripts( &pHtmlElementCollect ); + if ( FAILED( hr ) || !pHtmlElementCollect ) + { + return ( error = -1 ); + } + long collectionLength = 0; + hr = pHtmlElementCollect->get_length( &collectionLength ); + if ( FAILED( hr ) || !pHtmlElementCollect ) + { + return ( error = -1 ); + } + if ( collectionLength < 1 ) + { + // javascript engine was not specified on the page. + // hence we need to initialize it by infusing javascript + // element tags + + CComPtr spHtmlElement; + hr = pHtml2Doc->createElement( CComBSTR( "script" ), &spHtmlElement ); + if ( SUCCEEDED( hr ) && spHtmlElement ) + { + hr = spHtmlElement->put_language( CComBSTR( "javascript" ) ); + if ( SUCCEEDED( hr ) ) + { + CComPtr spElementDomNode; + hr = spHtmlElement->QueryInterface( IID_IHTMLDOMNode, ( void** )&spElementDomNode ); + if ( SUCCEEDED( hr ) && spElementDomNode ) + { + CComPtr spHtmlDomNode; + hr = pHtml2Doc->QueryInterface( IID_IHTMLDOMNode, ( void** )&spHtmlDomNode ); + if ( SUCCEEDED( hr ) && spHtmlDomNode ) + { + CComPtr newNode; + hr = spHtmlDomNode->appendChild( spElementDomNode, &newNode ); + } + } + } + } + } std::string p3dDllFilename; error = m_instance.DownloadP3DComponents( p3dDllFilename ); if ( !error && !( p3dDllFilename.empty() ) )