Модераторы: Partizan, gambit
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> target = "_blank" - не работает, webbrouser 
V
    Опции темы
transkriptsiya
Дата 17.8.2014, 16:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 101
Регистрация: 17.1.2008

Репутация: нет
Всего: нет



Всем привет,

На форме есть контрол WebBrouser, который корректно открывает сайт. но если страничка сайта открывается на новом листе - то запускается интернет експлорер - что меня катигорически не устраивает - все должно быть на форме. Попытка добиться успеха вот так 
Код

 private void webBrowser1_NewWindow(object sender, System.ComponentModel.CancelEventArgs e)
        {
            webBrowser1.Navigate(webBrowser1.StatusText);
            e.Cancel = true;
        }

не помогла - открывает стартовую страницу- пару секунд думает - потом пишет что страница не доступна.

Код

 public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
            webBrowser1.Navigate(@"C:\Users\Lena\Documents\Unnamed Site 2\MyBooks.html");
        }

        private void webBrowser1_DocumentCompleted(object sender, WebBrowserDocumentCompletedEventArgs e)
        {

            HtmlElementCollection a_tag = webBrowser1.Document.GetElementsByTagName("a");

            foreach (HtmlElement he in a_tag)
            {
                if (he.InnerHtml == "Заголовок")
                    he.InvokeMember("click");
            }

        }


        private void webBrowser1_NewWindow(object sender, System.ComponentModel.CancelEventArgs e)
        {
            webBrowser1.Navigate(webBrowser1.StatusText);
            e.Cancel = true;
        }

       
       
    }


вот так все ок
Код

<h1><a href="Untitled-1.html">Заголовок</a></h1>

а с  target="_blank" - уже не работает

Код

<h1><a href="Untitled-1.html" target="_blank">Заголовок</a></h1>


PM MAIL   Вверх
jonie
Дата 18.8.2014, 20:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 5613
Регистрация: 21.8.2005
Где: Владимир

Репутация: 22
Всего: 118



нууу уберите этот атрибут вообще вырезав его javascript-том, исполненым вашим браузером (как вариант).
Вот как выполнить:
Код


    object[] args = {....javascript here...};
    webBrowser1.Document.InvokeScript("eval",args);


а функцию вроде такой
Код

(function()
{
    var elems=document.getElementsByTagName('a');
    for (var i=0;i<elems.length;i++)
    {
        var attrTarget = elems[i].getAttribute('target') || '';
        if (attrTarget.indexOf('_blank')==0)
        {
            elems[i].removeAttribute('target');
        }
    }
})();



--------------------
Что-то не поняли? -> Напейтесь до зеленых человечков... эта сверхцивилизация Вам поможет...
PM MAIL Jabber   Вверх
transkriptsiya
Дата 18.8.2014, 20:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 101
Регистрация: 17.1.2008

Репутация: нет
Всего: нет



подскажите. webBrowser1.Document.GetElementsByTagName("a")
по тегу <а> ищет - а вот если подставить <h1> - то не работает почему-то 

Это сообщение отредактировал(а) transkriptsiya - 18.8.2014, 21:14
PM MAIL   Вверх
diadiavova
Дата 18.8.2014, 22:44 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Доктор Зло(диагност, настоящий, с лицензией и полномочиями)
****


Профиль
Группа: Модератор
Сообщений: 5821
Регистрация: 14.8.2008
Где: В Коньфпольте

Репутация: 31
Всего: 142



Цитата(jonie @  18.8.2014,  21:31 Найти цитируемый пост)
нууу уберите этот атрибут вообще вырезав его javascript-том, исполненым вашим браузером (как вариант).
Вот как выполнить:

Зачем же такие сложности? Можно просто при загрузке документа обойти все гиперссылки и назначить атрибуту значение _self. 
Код

        private void webBrowser1_DocumentCompleted(object sender, WebBrowserDocumentCompletedEventArgs e)
        {
            if (webBrowser1.ReadyState == WebBrowserReadyState.Complete)
            {
                foreach (HtmlElement link in webBrowser1.Document.Links)
                {
                    link.SetAttribute("target", "_self");
                }
            }

        }



--------------------
Хочешь получить мудрый совет - читай подписи участников форумов.
Злой доктор Щасзаболит smile
PM   Вверх
jonie
Дата 18.8.2014, 23:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 5613
Регистрация: 21.8.2005
Где: Владимир

Репутация: 22
Всего: 118



Цитата(diadiavova @  18.8.2014,  23:44 Найти цитируемый пост)

Зачем же такие сложности? Можно просто при загрузке документа обойти все гиперссылки и назначить атрибуту значение _self. 

я не уверен что это хорошо будет работать при всяческих вещах типа DOM маниупуляциях после ajax вызовов и т.д. Я привёл лишь простенький скрипт, конечно, в реальности он должен быть посложнее 8-)


--------------------
Что-то не поняли? -> Напейтесь до зеленых человечков... эта сверхцивилизация Вам поможет...
PM MAIL Jabber   Вверх
diadiavova
Дата 19.8.2014, 00:45 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Доктор Зло(диагност, настоящий, с лицензией и полномочиями)
****


Профиль
Группа: Модератор
Сообщений: 5821
Регистрация: 14.8.2008
Где: В Коньфпольте

Репутация: 31
Всего: 142



Цитата(jonie @  19.8.2014,  00:46 Найти цитируемый пост)
я не уверен что это хорошо будет работать при всяческих вещах типа DOM маниупуляциях после ajax вызовов и т.д.

Я не думаю, что вопрос был об этом, но в принципе можно сделать что-то вроде такого
Код

       private void webBrowser1_DocumentCompleted(object sender, WebBrowserDocumentCompletedEventArgs e)
        {
            if (webBrowser1.ReadyState == WebBrowserReadyState.Complete)
            {
                webBrowser1.Document.Body.AttachEventHandler("onmousedown",
                    (object br, EventArgs ea) =>
                    {
                        dynamic win = webBrowser1.Document.Window.DomWindow;
                        dynamic element = [email protected];
                        dynamic link = element;
                        while (link.tagName != "A")
                        {
                            link = link.parentElement;
                            if (link.tagName == "BODY")
                            {
                                return;
                            } 
                        }
                        link.setAttribute("target", "_self");
                    });
            }

        }
То есть повесить на да документ обработчика мауздауна и проверять был ли он выполнен на ссылке, если ссылка найдена, то назначать ей таргет. Тут уже не важно была ли она сформирована после загрузки документа или нет. Но в любом случае, тут как не изголяйся, все равно возможны варианты, когда это не сработает.
Цитата(jonie @  19.8.2014,  00:46 Найти цитируемый пост)
привёл лишь простенький скрипт, конечно, в реальности он должен быть посложнее 8-)
Не знаю, мне такой способ взаимодействия с ДОМ не нравится. Его хорошо использовать, когда нет другого способа дотянуться до каких-то возможностей, ну например вызвать querySelector или еще что-то из новинок ие9, которые недоступны через ком-интерфейсы, а ради каких-то простых задач дергать инвоукскрипт smile 



--------------------
Хочешь получить мудрый совет - читай подписи участников форумов.
Злой доктор Щасзаболит smile
PM   Вверх
jonie
Дата 19.8.2014, 10:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 5613
Регистрация: 21.8.2005
Где: Владимир

Репутация: 22
Всего: 118



Цитата(diadiavova @  19.8.2014,  01:45 Найти цитируемый пост)
Не знаю, мне такой способ взаимодействия с ДОМ не нравится. Его хорошо использовать, когда нет другого способа дотянуться до каких-то возможностей, ну например вызвать querySelector или еще что-то из новинок ие9, которые недоступны через ком-интерфейсы, а ради каких-то простых задач дергать инвоукскрипт 

ну вообще в js нынче и модно менять dom имхо. Я даже думаю что это работает быстрее и везде, не только в IE хосте (и не факт что завтра там что-нибудь не поменяют)...


--------------------
Что-то не поняли? -> Напейтесь до зеленых человечков... эта сверхцивилизация Вам поможет...
PM MAIL Jabber   Вверх
transkriptsiya
Дата 21.8.2014, 22:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 101
Регистрация: 17.1.2008

Репутация: нет
Всего: нет



Цитата
Код

Зачем же такие сложности? Можно просто при загрузке документа обойти все гиперссылки и назначить атрибуту значение _self. 

        private void webBrowser1_DocumentCompleted(object sender, WebBrowserDocumentCompletedEventArgs e)
        {
            if (webBrowser1.ReadyState == WebBrowserReadyState.Complete)
            {
                foreach (HtmlElement link in webBrowser1.Document.Links)
                {
                    link.SetAttribute("target", "_self");
                }
            }

        }

То что  доктор прописал. Большое спасибо!!!

Это сообщение отредактировал(а) transkriptsiya - 21.8.2014, 22:40
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Прежде чем создать тему, посмотрите сюда:
mr.DUDA
THandle

Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов.
Что делать если Вам помогли, но отблагодарить помощника плюсом в репутацию Вы не можете(не хватает сообщений)? Пишите сюда, или отправляйте репорт. Поставим :)
Так же не забывайте отмечать свой вопрос решенным, если он таковым является :)


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, mr.DUDA, THandle.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Общие вопросы по .NET и C# | Следующая тема »


 




[ Время генерации скрипта: 0.0585 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.