Можно ли запустить JavaScript в элементе управления webBrowser без доступа к определенной странице?

Я создаю веб-страницу в качестве вывода для своего приложения. Это означает, что я редактирую текст документа напрямую, а не указываю элемент управления на файл. У меня есть следующий код:

<html>
<head>
<style type = "text/css"> 
.circle {
    position:relative;
    moz-border-radius: 10px;
    -webkit-border-radius: 10px;
    -khtml-border-radius: 10px;
    border-radius: 10px;
    -moz-background-clip: padding;
    -webkit-background-clip: padding-box;
    background-clip: padding-box;
    border: 1px solid #000;

    height: 10px;
    width: 10px;
    background-color:#33FF00;
}
</style>

<script type="text/javascript">
var step = 0;
var color= '#0000FF';
function timer()
{
    var t=setTimeout("switchColor()",125);
}
function switchColor()
{
    if (step == 0) {color='#33FF00';}
    if (step == 1) {color='#33FF00';}
    if (step == 2) {color='#22AA55';}
    if (step == 3) {color='#1155AA';}
    if (step == 4) {color='#0000FF';}
    if (step == 5) {color='#0000FF';}
    if (step == 6) {color='#1155AA';}
    if (step == 7) {color='#22AA55';}
    step = step+1;
    if (step > 7) { step = 0;}

    var elements = document.getElementsByClassName('circle')
    for (var i = 0;i <elements.length;i++)
    {
        elements[i].style.backgroundColor=color;
    }

    timer()
}
</script>

</head>
<body onload="timer()" >
<div id="test" class="circle1"></div>
<div class="circle"></div><div class="circle"></div>
<br>
<br>
</body>
</html>

Затем этот код задается как documentText элемента управления webBrowser с помощью stringBuilder, добавления каждой строки с помощью функции StringBuilder.AppendLine(), а затем преобразования всего stringBuilder в строку.

Я получаю сообщение об ошибке, что функция getElementsByClassName не поддерживается, и ничего не происходит. HTML отлично работает сам по себе.


person Nathan Tornquist    schedule 20.12.2011    source источник
comment
Когда я копирую код, который у вас есть, на пустую html-страницу и просматриваю его в IE, я получаю сообщение об ошибке: Объект не поддерживает это свойство или метод. Строка 41, которая является строкой с GetElementsByClassName. Если он не работает в IE, он не будет работать в WebBrowserControl.   -  person Johnie Karr    schedule 20.12.2011
comment
Я не получаю ошибок в Internet Explorer, но код работает не так хорошо, как в Firefox. Есть ли решение для этого?   -  person Nathan Tornquist    schedule 20.12.2011
comment
Насколько я понимаю, WebBrowserControl использует движок IE, поэтому вам просто нужно заставить его работать в IE.   -  person Johnie Karr    schedule 20.12.2011
comment
Попробуйте сначала загрузить пустую HTML-страницу. У меня такое ощущение, что DOM неполный, если вы просто пытаетесь вставить HTML-текст в пустой элемент управления.   -  person Mike Marshall    schedule 20.12.2011
comment
Это проблема с этой конкретной командой getElementsByClassName. Сначала я не проверял, существует ли он в IE. Увы, это не так. Я решил, что мой код достаточно прост, чтобы я мог без проблем протестировать его в Firefox. Я ошибался.   -  person Nathan Tornquist    schedule 20.12.2011


Ответы (3)


Элемент управления WebBrowser может запускать javascript в реальном времени, но имеет те же ограничения, что и Internet Explorer. Любые команды, используемые в элементе управления, должны выполняться в Internet Explorer на соответствующем компьютере.

person Nathan Tornquist    schedule 20.12.2011

Вам нужно будет использовать getElementsByTagName('*'), перебрать список и проверить, имеет ли каждый элемент желаемое имя класса.

person Adilson de Almeida Jr    schedule 20.12.2011

В качестве ответа для вас я предлагаю вам использовать jQuery. Он может находить элементы определенного класса и отлично работает в IE. В частности, посмотрите на селектор класса.

www.jquery.com

http://api.jquery.com/class-selector/

person Johnie Karr    schedule 20.12.2011