ประเภทแรก: เรียกผ่าน ExecScript แม้ว่าวิธีนี้จะใช้งานได้ง่าย แต่ก็ไม่สามารถรับค่าคืนได้
m_sphtmldoc-> get_parentwindow (& m_phtmlwindow); ตัวแปร ret; ret.vt = vt_empty; bstr bstr = sscript.allocsystring (); bret = m_phtmlwindow-> execscript cstring (ret);
ประเภทที่สอง: ก่อนอื่นใช้ getIdSofNames เพื่อค้นหาชื่อฟังก์ชันสคริปต์แล้วเรียกมันว่า วิธีนี้สามารถส่งคืนผลลัพธ์และมีค่าส่งคืน แต่มันเป็นไปไม่ได้ที่จะเรียกฟังก์ชั่นระบบของ JS เช่น Eval
BOOL CDHTMLDLGWINDOW :: CallJScript (const cstring strfunc, const cstringarray & paramarray, ccomvariant* pvarresult) {ccomptr spscript; if (null == m_sphtmldoc) {return false; } HRESULT HR; hr = m_sphtmldoc-> get_script (& spscript); ถ้า (! ประสบความสำเร็จ (HR)) {return false; } CCOMBSTR BSTRMEMBER (STRFUNC); dispid dispid = null; HR = SPScript-> getIdSofNames (iid_null, & bstrmember, 1, locale_system_default, & dispid); ถ้า (ล้มเหลว (HR)) {return false; } const int arraysize = paramarray.getSize (); dispparams dispparams; memset (& dispparams, 0, sizeof dispparams); dispparams.cargs = arraysize; dispparams.rgvarg = ตัวแปรใหม่ [dispparams.cargs]; สำหรับ (int i = 0; i <arraysize; i ++) {ccombstr bstr = paramarray.getat (อาร์เรย์ - 1 - i); // กลับมาอ่าน bstr.copyto (& dispparams.rgvarg [i] .bstrval); dispparams.rgvarg [i] .vt = vt_bstr; } dispparams.cnamedargs = 0; excepinfo exceptioninfo; memset (& excepinfo, 0, sizeof exceptioninfo); ccomvariant varesult; uint nargerr = (uint) -1; // เริ่มต้นเป็น arg hr = spscript-> revoke (dispid, iid_null, 0, dispatch_method, & dispparams, & varesult, & excepinfo, & nargerr); ลบ [] dispparams.rgvarg; ถ้า (ล้มเหลว (HR)) {return false; } *pvarresult = varesult; คืนจริง;}เมื่อใช้จริงคุณอาจเข้าถึงหน้าก่อน จากนั้นทำการโทร JS ไปยังหน้านี้ใน VC และดึงผลลัพธ์ เป็นไปได้ว่าฟังก์ชั่นที่เรียกโดย JS นี้ไม่สามารถใช้ได้ในหน้านี้ โดยทั่วไปคุณสามารถใช้รูปแบบของ Eval (คำสั่ง JS บางตัว) เพื่อเรียกฟังก์ชั่นการโทรที่ไม่ได้อยู่ในหน้า แต่ตอนนี้ไม่มีวิธีการข้างต้นที่รองรับการประเมิน
ประเภทที่สาม: รับบริบทเอกสารปัจจุบันผ่าน IScriptControl จากนั้นเรียกใช้การดำเนินการ iscriptControl :: raw_eval (คุณสามารถใช้ RAW_EVAL เท่านั้นการใช้วิธีการประเมินจะแจ้งให้ทราบว่าไม่มีการอนุญาต)
แรกกำหนดหนึ่ง: iscriptcontrolptr จากนั้นเรียก m_sphtmldoc-> get_parentwindow (& m_phtmlwindow);
iscriptControlptr-> addObject ("หน้าต่าง", m_phtmlwindow, variant_true);
ประเภทที่สามต้องการการนำเข้า "msscript.ocx"
หลายวิธีข้างต้น (แนะนำ) ของการเรียกใช้ VC JavaScript เป็นเนื้อหาทั้งหมดที่ฉันแบ่งปันกับคุณ ฉันหวังว่าคุณจะให้ข้อมูลอ้างอิงและฉันหวังว่าคุณจะสนับสนุน wulin.com มากขึ้น