2015-09-18 2 views
1

решение:Javascript в C# WebBrowser Control не выполняется, когда DesignMode активированный

Javascript не выполняется внутри WebBrowser-контроля, когда DesignMode установлен в положение "включено", в моем случае это было:

document = webbrowser.Document as HTMLDocument; 
document.designMode = "On"; 

свойство DesignMode остановил WebBrowser-контроль выполнения JavaScript, поэтому я изменил его на следующее:

document.body.setAttribute("contentEditable", "true"); 

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

оригинальный вопрос:

я пытаюсь реализовать C# GUI с WebBrowser-контролем. Внутри Webbrowser я вызываю локально хранящиеся HTML-файлы, файлы всегда хранятся на C: или D :, они не находятся в общих папках или что-то в этом роде. Все работает отлично.

Теперь я попытался добавить JavaScript в HTML-файлы с некоторыми базовыми функциями для редактирования html-таблиц (Add Row, Add Column и т. Д.). Но Javascript не выполняется внутри элемента управления webbrowser. Я попытался открыть файлы с помощью IE, и я получаю запрос на содержимое ActiveX, я говорю IE «Разрешить заблокированный контент», и все работает нормально. (Я не получаю приглашение внутри элемента управления webbrowser.) Теперь вопрос: возможно ли «всегда включать» любые сценарии в элементе управления веб-браузером или подсказывать так же, как IE?

Конечно я искал в Интернете и Stackoverflow и я нашел несколько решений:

  1. IE Подсказки только для локальных файлов. Выполняется Javascript с любого сайта (например, http://javatester.org/javascript.html). Добавление следующего кода в локальный HTML-файл должно устранить эту проблему (как указано здесь: https://msdn.microsoft.com/en-us/library/ms537628(v=vs.85).aspx). Я попробовал это с помощью базового примера с сайта msdn, и он сработал, но после добавления некоторого кода Code он больше не работал. IE снова подсказал мне, поэтому это решение показалось мне ненадежным.

    <!-- saved from url=(0014)about:internet -->

    или

    <!-- saved from url=(0023)http://www.contoso.com/ -->

  2. Другим решением было изменить настройки безопасности IE, это также должно влиять на WebBrowser-контроль. Поэтому я попытался установить все зоны на самый низкий уровень безопасности (параметры Интернета -> безопасность), после чего я нажал «пользовательский уровень», чтобы включить еще больше. Но он все еще не работал, я все еще получил подсказку. Было только одно, чего я не понял: открыть HTML-файлы в обычном режиме предложили мне выполнить скрипт, но inprivate-mode немедленно выполнил любой скрипт. Это просто ошибка или нормальное поведение? Но, наконец, изменение настроек безопасности снова не принесло никакого решения

  3. Метод Invokescript внутри моей программы на C# не смог запустить никаких скриптов.

  4. Редактировать таблицы напрямую (с помощью execCommand("enableInlineTableEditing", true);) не работает, так как эта команда не поддерживается IE.

Так что, если вы прочтете до этого момента, я должен сказать спасибо. И если у вас есть идея, как надежно активировать JavaScripts внутри элемента управления webbrowser или просто редактировать html-таблицы внутри элемента управления webbrowser, я был бы очень счастлив :)

КВ: Я использую .NET 4.5 и я тестировал все решения и два разных ПК с разными пользователями. Наконец, я сожалею о своем английском, надеюсь, что все могли понять.

редактировать: Простой пример, который отлично работает в IE (даже не побуждая), но его не выполняет каких-либо JS в WebBrowser-контроль:

<!doctype html> 
<!-- saved from url=(0023)http://www.contoso.com/ --> 
<html> 
    <head> 
    <title>A Mark of the Web Example test</title> 
    </head> 
    <body> 
    <p>Hello, World</p> 
    <script language="JavaScript"> 
     document.write ("Hello Javascript"); 
    </script> 

    <p> 
    alert test 
    </p> 
    <script language="JavaScript"> 
     alert("test"); 
    </script> 
    </body> 
</html> 
+0

Можете ли вы разместить код? – Abhishek

+0

Несомненно, я добавил очень простой пример (на основе примера ms из https://msdn.microsoft.com/en-us/library/ms537628(v=vs.85).aspx) – user4288741

+0

Является ли ваше приложение [тегом : wpf] или [tag: winforms]? – Abhishek

ответ

1

Javascript не выполняется внутри WebBrowser-контроля, когда DesignMode установлен в положение «включено», в моем случае это было:

document = webbrowser.Document as HTMLDocument; 
document.designMode = "On"; 

свойство DesignMode остановил WebBrowser-контроль выполнения JavaScript, поэтому я изменил его на следующее:

document.body.setAttribute("contentEditable", "true"); 

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

Смежные вопросы