النوع الأول: اتصل من خلال execscript. على الرغم من أن هذه الطريقة سهلة التشغيل ، إلا أنها لا تستطيع الحصول على قيمة الإرجاع.
m_sphtmldoc-> get_parentwindow (& m_phtmlwindow) ؛ variant ret.vt = vt_empty ؛ bstr bstr = sscript.allocsysstring () ؛ bret = m_phtmlwindow-> execscript (bstr ، l "javascript 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) ؛ if (! نجحت (hr)) {return false ؛ } ccombstr bstrmember (strfunc) ؛ dispid dispid = null ؛ hr = spscript-> getIdSofNames (iid_null ، & bstrmember ، 1 ، locale_system_default ، & dispid) ؛ if (فشل (hr)) {return false ؛ } const int ArraySize = paramarray.getSize () ؛ dispparams dispparams. memset (& dispparams ، 0 ، sizeof dispparams) ؛ dispparams.cargs = صفائف ؛ dispparams.rgvarg = new variant [dispparams.cargs] ؛ لـ (int i = 0 ؛ i <sharrayize ؛ i ++) {ccombstr bstr = paramArray.getat (ArraySize - 1 - i) ؛ // back reading bstr.copyto (& dispparams.rgvarg [i] .bstrval) ؛ dispparams.rgvarg [i] .vt = vt_bstr ؛ } dispparams.cnamedargs = 0 ؛ excepinfo استثناء memset (& excepinfo ، 0 ، sizeof stiventInfo) ؛ ccomvariant varesult ؛ uint nargerr = (uint) -1 ؛ // تهيئة إلى arg arg غير صالح Hr = spscript-> invoke (dispid ، iid_null ، 0 ، dispatch_method ، & dispparams ، & varesult ، & excepinfo ، & nargerr) ؛ حذف [] dispparams.rgvarg ؛ if (فشل (hr)) {return false ؛ } *pvarresult = varesult ؛ إرجاع صحيح ؛}عند استخدامه فعليًا ، قد تكون قد وصلت إلى صفحة أولاً. بعد ذلك ، قم بإجراء بعض مكالمات JS إلى هذه الصفحة في VC واسترداد النتيجة. من الممكن أن تكون الوظيفة التي يطلق عليها JS هذه غير متوفرة في هذه الصفحة. بشكل عام ، يمكنك استخدام شكل Eval (بعض عبارات JS) لاستدعاء وظائف غير موجودة في الصفحة ، ولكن الآن لا يدعم أي من الأساليب المذكورة أعلاه Eval.
النوع الثالث: احصل على سياق المستند الحالي من خلال iScriptControl ، ثم اتصل على عملية IScriptControl :: RAW_EVAL. (يمكنك فقط استخدام RAW_EVAL. باستخدام طريقة EVAL سيؤدي إلى عدم وجود إذن.)
أولاً ، تحديد واحد: iScriptControlPtr ، ثم اتصل m_sphtmldoc-> get_parentwindow (& m_phtmlwindow) ؛
iScriptControlPtr-> addObject ("window" ، m_phtmlwindow ، variant_true) ؛
النوع الثالث يتطلب استيراد "msscript.ocx"
الطرق العديدة أعلاه (الموصى بها) من VC Calling JavaScript هي كل المحتوى الذي أشاركه معك. آمل أن تتمكن من إعطائك مرجعًا وآمل أن تتمكن من دعم wulin.com أكثر.