Tipe Pertama: Hubungi melalui Execscript. Meskipun metode ini mudah dioperasikan, ia tidak dapat memperoleh nilai pengembalian.
m_sphtmlDoc-> get_parentwindow (& m_phtmlwindow); varian ret; ret.vt = vt_empty; bstr Bstr = sscript.allocsysstring (); bret = m_phtmlindow-> execscript (bstr, l "javascript", & ret); CString (ret);
Tipe kedua: pertama gunakan getIdsOfNames untuk menemukan nama fungsi skrip, lalu sebut saja. Metode ini dapat mengembalikan hasilnya dan memiliki nilai pengembalian. Tetapi tidak mungkin untuk memanggil fungsi sistem JS, seperti eval.
Bool cdhtmldlgwindow :: calljscript (const cstring strfunc, const cstringarray & parararray, ccomvariant* pvarresult) {cComptr spscript; if (null == m_sphtmldoc) {return false; } HResult HR; hr = m_sphtmldoc-> get_script (& spscript); if (! Succeeded (hr)) {return false; } CCCCRTR BSTRMUBER (Strfunc); Dispid dispid = null; hr = spscript-> getIdsofnames (iid_null, & bstrmember, 1, locale_system_default, & dispid); if (gagal (hr)) {return false; } const int arraysize = paramarray.getsize (); Disparams dispparams; memset (& dispparams, 0, sizeof dispparams); disparams.cargs = arraysize; disparams.rgvarg = varian baru [disparams.cargs]; untuk (int i = 0; i <arraysize; i ++) {ccombstr bstr = paramarray.getat (arraysize - 1 - i); // kembali membaca bstr.copyto (& disparams.rgvarg [i] .bstrval); disparams.rgvarg [i] .vt = vt_bstr; } disparams.cnamedArgs = 0; Excepinfo ExceptionInfo; memset (& excepinfo, 0, sizeof ExceptionInfo); CComvariant Varesult; Uint nargerr = (uint) -1; // Inisialisasi ke arg tidak valid hr = spscript-> Invoke (dispid, iid_null, 0, dispatch_method, & dispparams, & varesult, & excepinfo, & nargerr); hapus [] disparams.rgvarg; if (gagal (hr)) {return false; } *pvarresult = varesult; mengembalikan true;}Saat benar -benar menggunakannya, Anda mungkin telah mengakses halaman terlebih dahulu. Kemudian, buat beberapa panggilan JS ke halaman ini di VC dan ambil hasilnya. Ada kemungkinan bahwa fungsi yang dipanggil oleh JS ini tidak tersedia di halaman ini. Secara umum, Anda dapat menggunakan bentuk eval (beberapa pernyataan JS) untuk memanggil fungsi yang tidak ada di halaman, tetapi sekarang tidak satu pun dari metode di atas mendukung eval.
Tipe ketiga: Dapatkan konteks dokumen saat ini melalui iScriptControl, dan kemudian hubungi Operasi IscriptControl :: Raw_eval. (Anda hanya dapat menggunakan RAW_EVAL. Menggunakan metode eval akan meminta bahwa tidak ada izin.)
Pertama-tama definisikan satu: iscriptControlptr, lalu hubungi m_sphtmldoc-> get_parentwindow (& m_phtmlwindow);
IscriptControlptr-> addObject ("window", m_phtmlwindow, varian_true);
Tipe ketiga membutuhkan impor "msscript.ocx"
Beberapa metode di atas (disarankan) dari VC Calling JavaScript adalah semua konten yang saya bagikan dengan Anda. Saya harap Anda dapat memberi Anda referensi dan saya harap Anda dapat mendukung wulin.com lebih lanjut.