佚名通过本文主要向大家介绍了chtmlview,mfc chtmlview,chtmlview类,ie浏览器报脚本错误,开机报脚本错误等相关知识,希望对您有所帮助,也希望大家支持linkedu.com www.linkedu.com
问题: CHTMLVIEW报脚本错误,希望屏蔽,不显示任何东西,如何处理?
描述:
这是我从网上找的代码..
如果无法在CHTMLVIEW中把错误处理掉,是否可以设置IE的安全选项处理这些问题喃?
求解,谢谢!
解决方案1:
除了上面代码创建 ie 的时候要加一句,楼主漏掉的可能是这一行代码。
// IWebBrowser2* GetWebInterface () {...}
DispEventAdvise(m_wndIE.GetWebInterface()); 解决方案2:
描述:
CComPtr<IDispatch> spDisp = GetHtmlDocument();
if(spDisp!=NULL)
{
CComPtr<IHTMLDocument2> doc;
spDisp->QueryInterface(IID_IHTMLDocument2, reinterpret_cast<void**>(&doc));
if(doc != NULL)
{
IHTMLWindow2 * pIhtmlwindow2 = NULL;
doc->get_parentWindow(&pIhtmlwindow2);
if(pIhtmlwindow2 != NULL)
{//
//屏蔽javascript脚本错误的javascript脚本
CString strJavaScriptCode = "function fnOnError(msg,url,lineno){alert('script error:\\n\\nURL:'+url+'\\n\\nMSG:'+msg +'\\n\\nLine:'+lineno);return true;}window.//当有错误的时候显示这个对话框,我改为CString strJavaScriptCode = "function fnOnError(msg,url,lineno){}window. /> BSTR bstrScript = strJavaScriptCode.AllocSysString();
CString strLanguage("JavaScript");
BSTR bstrLanguage = strLanguage.AllocSysString();
long lTime = 1 * 1000;
long lTimeID = 0;
VARIANT varLanguage;
varLanguage.vt = VT_BSTR;
varLanguage.bstrVal = bstrLanguage;
VARIANT pRet;
//把window.onerror函数插入入当前页面中去
pIhtmlwindow2->execScript(bstrScript, bstrLanguage, &pRet);
::SysFreeString(bstrScript);
::SysFreeString(bstrLanguage);
pIhtmlwindow2->Release();
}
}
}
这是我从网上找的代码..
如果无法在CHTMLVIEW中把错误处理掉,是否可以设置IE的安全选项处理这些问题喃?
求解,谢谢!
解决方案1:
//修改注册表,不让ie弹出 js 的脚本错误
void ChangeIERegedit()
{
TCHAR szExeFileName[MAX_URLSTRING];
_tcscpy(szExeFileName, _T("yes"));
HKEY hKEY;
DWORD disp/* = REG_OPENED_EXISTING_KEY*/;//
LONG lResult = ::RegCreateKeyEx(HKEY_CURRENT_USER, _T("Software\\Microsoft\\Internet Explorer\\Main"),\
0, NULL, REG_OPTION_NON_VOLATILE, KEY_READ | KEY_WRITE, NULL, &hKEY, &disp);
if(lResult == ERROR_SUCCESS)
{
::RegSetValueEx(hKEY, _T("Disable Script Debugger"), 0,REG_SZ, (CONST BYTE*)szExeFileName,
#ifdef _UNICODE
lstrlenW(szExeFileName)*2+2
#else
lstrlenA(szExeFileName)+1
#endif
);
::RegFlushKey(hKEY);
::RegCloseKey(hKEY);
}
LONG lResultIE = ::RegCreateKeyEx(HKEY_CURRENT_USER, _T("Software\\Microsoft\\Internet Explorer\\Main"),\
0, NULL, REG_OPTION_NON_VOLATILE, KEY_READ | KEY_WRITE, NULL, &hKEY, &disp);
if(lResultIE == ERROR_SUCCESS)
{
::RegSetValueEx(hKEY, _T("DisableScriptDebuggerIE"), 0,REG_SZ, (CONST BYTE*)szExeFileName,
#ifdef _UNICODE
lstrlenW(szExeFileName)*2+2
#else
lstrlenA(szExeFileName)+1
#endif
);
::RegFlushKey(hKEY);
::RegCloseKey(hKEY);
}
if((lResult != ERROR_SUCCESS) || (lResultIE != ERROR_SUCCESS))
{
CString strText, strCaption;
strText.LoadString(IDS_STR_REGIT);
strCaption.LoadString(IDS_STR_HINT);
MsgTaskbarNotifier(0, strText);
}
}
除了上面代码创建 ie 的时候要加一句,楼主漏掉的可能是这一行代码。
// IWebBrowser2* GetWebInterface () {...}
DispEventAdvise(m_wndIE.GetWebInterface()); 解决方案2:
先接分
怎么搞定的?
jf~
解决方案4:最欣赏能自己解决错误的达人了,解龄还需系铃人