2009-07-18 2 views
1

Я развивающуюся редактор HTML с использованием comdlg32.ocx (Control Коммон Dialog), с использованием HTML и VBScript. Мое точное требование заключалось в том, чтобы вызывать диалоговые окна Open/Save/Color/Print/Font. Я написал код для запроса диалогового окна «Сохранить файл». Также я добавил файл лицензии с помощью LPK Tool на свою веб-страницу.comdlg32.ocx Ошибка: Объект не поддерживает это свойство или метод

Мой HTML-источник выглядит следующим образом:

<body> 
<!-- lpk file --> 
<object classid="clsid:5220cb21-c88d-11cf-b347-00aa00a28331"> 
    <param name="LPKPath" value="License/comdlg.lpk" /> 
</object> 
<!-- Microsoft Common Dialog Control --> 
<object classid="CLSID:F9043C85-F6F2-101A-A3C9-08002B2F49FB" codebase="http://activex.microsoft.com/controls/vb6/COMDLG32.CAB" id="objComDlg"></object> 
</body> 

Теперь, вот моя ошибка. Всякий раз, когда я пытаюсь вызвать VBScript для побуждая диалоговое окно Сохранить файл, я получаю сообщение об ошибке, как: Объект не поддерживает это свойство или метод: «objComDlg.Filter»

Если я закомментируйте objComDlg.Filter, тогда ошибка переходите на objComDlg.DialogTitle и, таким образом, она продолжается.

И мой VBScript выглядеть:

FILE_FORMATS = "Rich Text Format (*.rtf)|*.rtf|Microsoft Word (*.doc)|*.doc|ANSI Text Document (*.txt)|*.txt" 
objComDlg.Filter = FILE_FORMATS <--- Error shows here 
objComDlg.DialogTitle = "Save As " 
objComDlg.Flags = cdlOFNFileMustExist Or cdlOFNHideReadOnly 
objComDlg.CancelError = True 
objComDlg.ShowSave 

Кто-нибудь есть идея, почему это происходит? Есть ли подходящая документация для использования этого конкретного элемента управления ActiveX? Из-за этой ошибки моя текущая разработка находится в режиме ожидания.

BTW, я использую Windows XP SP3 и IE8 для своего развития.

ответ

0

Создаете ли вы свой objComDlg над VBscript, который вы опубликовали? Что-то вроде:

Dim objComDlg As Object : Set objComDlg = CreateObject("MSComDlg.CommonDialog") 
+0

Я немного изменил код выше. Dim objComDlg Set objComDlg = CreateObject («MSComDlg.CommonDialog») <- ошибка приходит сюда После запуска page.I'm ПОЛУЧАТЬ ошибку, как «Контроль не может быть создан, потому что нет лицензии «. Это из-за проблемы с .lpk-файлом, который я создал. Пожалуйста, предложите. – abhilashca

1

Похоже, ваша проблема может быть связана с некоторыми крупными изменениями MS из библиотек OCX, чтобы исправить различные дыры в безопасности в контрольной группе. Я замечаю, что у вас работает SP3, вероятно, это были исправления, которые, похоже, имели эффект постукивания на элементах управления, например. некоторые методы исчезли!

Я столкнулся с той же проблемой - метод был вызван в устаревшем приложении на msflxgrd.ocs (метод строк), который, судя по всему, не существует. Взял меня на пол года, чтобы найти решение. Я думаю, вам нужно либо отменить обновление безопасности, либо изменить код, чтобы не использовать этот отсутствующий метод objComDlg.Filter.

См. this article для получения дополнительной информации.

- EDIT

ОК У меня есть более конкретная информация в настоящее время, это работает для меня (кроме моя проблема была с msflxgrd.ocx, но я думаю, что это та же самая проблема).

Существует специальное обновление для Microsoft (KB960715), которое подключило некоторые дыры в элементах управления ActiveX, поэтому уязвимые методы все еще присутствуют в элементах управления, но блокируются killbits. Удаление обновления решило мою проблему, очевидно, если бы вы могли, было бы лучше изменить свой код, потому что удаление обновления делает вас уязвимым для эксплойтов, которое было предназначено для исправления!

+0

Привет, Спасибо за ответ. Я столкнулся с такой же проблемой на форумах MSDN и Technet. Но, я тоже не получил никакого ответа. И никто не упоминал о проблемах с Win XP SP3. Интересно, почему они не могут предоставить какое-либо решение. Huh! Спасибо. – abhilashca

+0

Ive обновил мой ответ с дополнительной информацией, попробуйте удалить KB960715 и посмотреть, что произойдет –

1

У меня возникла та же проблема, но это происходит только на некоторых машинах.Мне удалось воссоздать проблему со следующими шагами:

  1. Используя Microsoft Virtual PC 2007, установите чистую сборку XP Pro.
  2. Не устанавливая ничего, кроме добавлений виртуальной машины, применяйте все обновления MS.
  3. Запустите код, как описано выше. Я также представил альтернативу ниже.

Похоже, что проблема произошла с помощью обновления MS. Используя статью базы знаний KB240797 (http://support.microsoft.com/default.aspx/kb/240797?p=1), я смог определить, что для элемента управления Common Dialog ActiveX был выпущен бит уничтожения, и предоставлен альтернативный идентификатор класса (8F0F480A-4366-4737-8265-2AD6FDAC8C31), что указывает на то, что контроль был заменен. Тем не менее, после проверки других машин, на которых работал элемент управления, в частности, были созданы машины разработки (XP Pro x64, XP Pro x32 & Vista x32), каждая из которых имела копию Visual Studio 2008, не было ни одной записи бит бит, и не было альтернативного класса Я БЫ.

Чтобы получить диалоговое окно, я просто переименовал раздел реестра (я тоже мог его удалить), а это значит, что больше не было бит уничтожения. Эй, престо, это сработало!

ключ реестра:

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Internet Explorer\ActiveX Compatibility{F9043C85-F6F2-101A-A3C9-08002B2F49FB}

Я думаю, что есть шанс, что это будет вновь применен с будущим Microsoft накопительного обновления, и он может также открыть некоторые уязвимости в системе безопасности.

Я надеюсь, что это вам поможет. Спасибо за ваш оригинальный пост, поскольку он, похоже, поставил меня на правильный путь.

Кэйн

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 

<html xmlns="http://www.w3.org/1999/xhtml"> 
<head> 
    <title>Common Dialog Test</title> 


    <script language="vbscript" type="text/vbscript"> 
    Sub AlertErr() 
     On Error Resume Next 

     document.objComDlg.Copies = 1 
     document.objComDlg.FromPage = 1 
     document.objComDlg.ToPage = 1 
     document.objComDlg.Min = 1 
     document.objComDlg.Max = 1 
     document.objComDlg.Flags = cdlPDHidePrintToFile Or cdlPDNoSelection 
     document.objComDlg.CancelError = True 

     printerDialog = document.objComDlg.ShowPrinter 
     If Err.Number = 0 Then 
     Call MsgBox("No Error. The print simulation worked as expected.") 
     ElseIf Err.Number = 32755 Then 
     Call MsgBox("You clicked the 'Cancel' button.") 
     Else 
     Call MsgBox("The following error occurred: " & Err.Description & " (" & Err.Number & ")") 
     End If 
    End Sub 
    </script> 
</head> 
<body> 
    <div> 
     <button id="btnAlertErr" onclick="AlertErr()">Print Me</button> 

     <object classid="clsid:5220cb21-c88d-11cf-b347-00aa00a28331"> 
      <param name="LPKPath" value="CommonDialog.lpk"> 
     </object> 

     <object id="objComDlg" codebase="http://activex.microsoft.com/controls/vb6/comdlg32.cab" classid="clsid:F9043C85-F6F2-101A-A3C9-08002B2F49FB" viewastext> 
      <param name="_ExtentX" value="847" /> 
      <param name="_ExtentY" value="847" /> 
      <param name="_Version" value="393216" /> 
      <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="0" /> 
      <param name="FontItalic" value="0" /> 
      <param name="FontName" value="" /> 
      <param name="FontSize" value="8" /> 
      <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> 
    </div> 
</body> 
</html> 
Смежные вопросы