VC中怎么执行下面这个JavaScript语句,或是实现同样的效果? 如果有办法必将重谢谢!!
window.open('http://ad4.sina.com.cn/wn/cisco-bt-home-0226a.swf', '_new', 'top=240,left=300,width=520,height=310,toolbar=no,location=no,directories=no,status=no,menubar=no,scrollbars=no,resizable=no');

解决方案 »

  1.   

    #include <Urlmon.h>
    #include <tchar.h>
    #pragma comment(lib,"urlmon")
    #include <basetyps.h>
    typedef HRESULT STDAPICALLTYPE SHOWHTMLDIALOGFN(HWND hwndParent,
        IMoniker *pMk,
        VARIANT *pvarArgIn,
        WCHAR *pchOptions,
        VARIANT *pvarArgOut
    ); void CTesthtmldlgDlg::OnOK() 
    {
    // TODO: Add extra validation here
    HMODULE hMSHTML = LoadLibrary(TEXT("MSHTML.DLL"));
    BOOL fSuccess;
    WCHAR szUrl[]=L"http://www.csdn.net";
    IMoniker* pMoniker=NULL;
    WCHAR szOptions[]=L"dialogHeight: 179px; dialogWidth: 265px; dialogTop: 99px; dialogLeft: 390px; edge: Raised; center: Yes; help: Yes; resizable: Yes; status: Yes;";
    VARIANT varReturn;
    VariantInit(&varReturn);
    SHOWHTMLDIALOGFN* pfnShow;
    if(!hMSHTML)
    {
    fSuccess = FALSE;
    goto cleanup;
    }
    pfnShow = (SHOWHTMLDIALOGFN*)GetProcAddress(hMSHTML, TEXT("ShowHTMLDialog"));
    if(!pfnShow)
    {
    fSuccess = FALSE;
    goto cleanup;
    }
    if(FAILED(CreateURLMoniker(NULL, szUrl, &pMoniker)))
    {
    fSuccess = FALSE;
    goto cleanup;
    }
    (pfnShow)(NULL, pMoniker, NULL, szOptions, &varReturn);
    //(pfnShow)(NULL, pMoniker, NULL, NULL, &varReturn);
    //::MessageBox(NULL,"show html dialog","",MB_OK);
    cleanup:
    if(pMoniker)
    pMoniker->Release();
    if(hMSHTML)
    FreeLibrary(hMSHTML);}
      

  2.   

    http://www.codeguru.com/ieprogram/JSCalls.htmlThe Class Implementation
    class CWebPage
    {
    public:
      CWebPage();
      virtual ~CWebPage();  bool SetDocument(IDispatch* pDisp);
      LPDISPATCH GetHtmlDocument() const;
      const CString GetLastError() const;
      bool GetJScript(CComPtr<IDispatch>& spDisp);
      bool GetJScripts(CComPtr<IHTMLElementCollection>& spColl);
      CString ScanJScript(CString& strAText,CStringArray& args);  bool CallJScript(const CString strFunc);
      bool CallJScript(const CString strFunc,const CString strArg1);
      bool CallJScript(const CString strFunc,const CString strArg1,
                       const CString strArg2);
      bool CallJScript(const CString strFunc,const CString strArg1,
                       const CString strArg2,const CString strArg3);
      bool CallJScript(const CString strFunc,const 
                             CStringArray& paramArray);protected  CComPtr<IHTMLDocument2> m_spDoc;};Calling Technique
    The previously mentioned technique splits the following steps:Getting a pointer to the IHTMLDocument2 interface. 
    Getting IDispatch for a JavaScript object in an HTML document. 
    Getting DISPID for a given name of a JavaScript function. 
    Putting parameters to the DISPPARAM structure. 
    Calling a JavaScript function by using the Invoke method of the IDispatch interface. 
    Here is an example of getting a IDispatch pointer to the Java Scripts objects:bool CWebPage::GetJScript(CComPtr<IDispatch>& spDisp)
    {
      HRESULT hr = m_spDoc->get_Script(&spDisp);
      ATLASSERT(SUCCEEDED(hr));
      return SUCCEEDED(hr);
    }And here is the final function to call JavaScript:CComVariant CWebPage::CallJScript(const CString strFunc,
                                      const CStringArray&
                                            paramArray)
    {
      //Getting IDispatch for Java Script objects
      CComPtr<IDispatch> spScript;
      if(!GetJScript(spScript))
      {
        ShowError("Cannot GetScript");
        return false;
      }
      //Find dispid for given function in the object
      CComBSTR bstrMember(strFunc);
      DISPID dispid = NULL;
      HRESULT hr = spScript->GetIDsOfNames(IID_NULL,&bstrMember,1,
                             LOCALE_SYSTEM_DEFAULT,&dispid);
      if(FAILED(hr))
      {
        ShowError(GetSystemErrorMessage(hr));
        return false;
      }  const int arraySize = paramArray.GetSize();
      //Putting parameters
      DISPPARAMS dispparams;
      memset(&dispparams, 0, sizeof dispparams);
      dispparams.cArgs      = arraySize;
      dispparams.rgvarg     = new VARIANT[dispparams.cArgs];
      dispparams.cNamedArgs = 0;
      
      for( int i = 0; i < arraySize; i++)
      {
        CComBSTR> bstr = paramArray.GetAt(arraySize - 1 - i);
                  // back reading
        bstr.CopyTo(&dispparams.rgvarg[i].bstrVal);
        dispparams.rgvarg[i].vt = VT_BSTR;
      }
      EXCEPINFO excepInfo;
      memset(&excepInfo, 0, sizeof excepInfo);
      CComVariant vaResult;
      UINT nArgErr = (UINT)-1;      // initialize to invalid arg
      //Call JavaScript function
      hr = spScript->Invoke(dispid,IID_NULL,0,
                            DISPATCH_METHOD,&dispparams,
                            &vaResult,&excepInfo,&nArgErr);
      delete [] dispparams.rgvarg;
      if(FAILED(hr))
      {
        ShowError(GetSystemErrorMessage(hr));
        return false;
      }
      return vaResult;
    }
      

  3.   

    <html>
    <head>
    </head>
    <body onload="Init()">
    </body><script>
    function Init()
    {
    var obj = new ActiveXObject( "ComCom.EmbededObject" );
    obj.CallScript( document, "comeon" );
    obj.CallScript( document, "goon" );
    }
    function comeon()
    {
    alert( "Call comeon!" );
    }
    function goon()
    {
    alert( "Call goon!" );
    }
    </script>
    </html>
    STDMETHODIMP CEmbededObject::CallScript( IDispatch* pDocDisp, BSTR* pbstrFunc)
    {
    HRESULT hr; IHTMLDocument2* pDocument;
    IDispatch* pScript; hr = pDocDisp->QueryInterface( IID_IHTMLDocument2, (void**)&pDocument );
    if ( FAILED( hr ) ) return hr;
    hr = pDocument->get_Script( &pScript );
    if ( FAILED( hr ) ) return hr; DISPID dispid;
    DISPPARAMS dispparamsNoArgs = {NULL, NULL, 0, 0}; // Assign to pdex and bstrName
    if (SUCCEEDED( hr = pScript->GetIDsOfNames( IID_NULL, pbstrFunc, fdexNameCaseSensitive, LOCALE_SYSTEM_DEFAULT, &dispid)))
    {
    EXCEPINFO excepInfo;
    memset(&excepInfo, 0, sizeof excepInfo);
    CComVariant vaResult;
    UINT nArgErr = (UINT)-1;      // initialize to invalid arg //Call JavaScript function
    hr = pScript->Invoke(dispid, IID_NULL, 0,
    DISPATCH_METHOD, &dispparamsNoArgs, 
    &vaResult, &excepInfo, &nArgErr);
    } return hr;
    }Visual studio.NET/ie6 测试通过