Общий диалог шрифтов (comdlg32.ocx) не работает в Windows 7, вызывая из JavaScript в IE
Я попробовал диалог шрифтов в VB6 с приложением формы, и он мог запустить диалог шрифтов, но когда я попытался сделать то же самое в javascript, он потерпел неудачу за исключением:
Не удалось завершить операцию из-за ошибки 800a8000
в строке вызова ShowFont().
Вот мой HTML-код: есть идеи?
<html>
<head>
<title>test</title>
</head>
<script>
function doclick() {
var fontDlg = document.all.fontDlg
//var fontDlg = new ActiveXObject("MSComDlg.CommonDialog");
/*
cdlCCRGBInit = 1;
cdlCCFullOpen = 2;
cdlCCPreventFullOpen = 4;
fontDlg.Flags = (cdlCCRGBInit | cdlCCFullOpen | cdlCCPreventFullOpen);
fontDlg.CancelError = false;
fontDlg.Min = 8;
fontDlg.Max = 72;
fontDlg.DialogTitle = "Change font settings";
fontDlg.ShowFont();
//fontDlg.ShowColor();
*/
fontDlg.ShowFont();
}
</script>
<body>
<input type=button onclick=doclick() value="click me"/>
<OBJECT id="fontDlg" style="LEFT: 224px; POSITION: absolute; TOP: 24px" classid="clsid:F9043C85-F6F2-101A-A3C9-08002B2F49FB" CODEBASE="http://activex.microsoft.com/controls/vb5/comdlg32.cab #Version=1,0,0,0">
<PARAM NAME="_ExtentX" VALUE="847">
<PARAM NAME="_ExtentY" VALUE="847">
<PARAM NAME="_Version" VALUE="393216">
<PARAM NAME="CancelError" VALUE="0">
<PARAM NAME="Color" VALUE="0">
<PARAM NAME="Copies" VALUE="1">
<PARAM NAME="DefaultExt" VALUE="">
<PARAM NAME="DialogTitle" VALUE="">
<PARAM NAME="FileName" VALUE="">
<PARAM NAME="Filter" VALUE="">
<PARAM NAME="FilterIndex" VALUE="0">
<PARAM NAME="Flags" VALUE="0">
<PARAM NAME="FontBold" VALUE="">
<PARAM NAME="FontItalic" VALUE="">
<PARAM NAME="FontName" VALUE="">
<PARAM NAME="FontSize" VALUE="">
<PARAM NAME="FontStrikeThru" VALUE="0">
<PARAM NAME="FontUnderLine" VALUE="0">
<PARAM NAME="FromPage" VALUE="0">
<PARAM NAME="HelpCommand" VALUE="0">
<PARAM NAME="HelpContext" VALUE="0">
<PARAM NAME="HelpFile" VALUE="">
<PARAM NAME="HelpKey" VALUE="">
<PARAM NAME="InitDir" VALUE="">
<PARAM NAME="Max" VALUE="0">
<PARAM NAME="Min" VALUE="0">
<PARAM NAME="MaxFileSize" VALUE="260">
<PARAM NAME="PrinterDefault" VALUE="1">
<PARAM NAME="ToPage" VALUE="0">
<PARAM NAME="Orientation" VALUE="1">
</OBJECT>
</body>
</html>
3 ответа
Я не решил это. Я воспользовался советом Спудли и удалил зависимость из нашего веб-приложения. Вместо этого я просто сделал HTML-форму с некоторыми вариантами шрифта. Намного проще, и все работает отлично.
В каком контексте безопасности работает ваш код? Например, внутри самого IE или приложения, управляющего веб-браузером? Если это в IE, в какой зоне безопасности работает ваша страница?
Из соображений безопасности большинство COM-объектов в системе запрещено запускать внутри IE.
(Не то, чтобы это, вероятно, имело значение, но вы пропустили точку с запятой в первой строке вашей функции)
Модель безопасности IE прошла долгий путь, так как подобный код считался хорошей идеей.
Если вам повезет, вы сможете запустить его, отключив множество функций безопасности в IE8.