2013-03-27 3 views
1

Это странно, и я чувствую себя глупо.Как добраться до элементов страницы?

В CRM, я ударил F12 и проверить, что желтый предупреждающий раздел является DIV с идентификатором Уведомления (и суб-DIVs называется Notification0, Notification1 и т.д.).

Однако, когда я пошел document.getElementById("Notifications"), я получил приседания. WTF ?!

Кроме того, когда я отправился document.write(""), ничего не изменилось. В Cr и FF, но IE не реагировал. Я сошел с ума?

РЕДАКТИРОВАТЬ:

enter image description here

выше опечатка. Когда я пытаюсь выполнить:

document.getElementById("crmNotifications") 

Я получаю nada, ни ... Предложения?

+0

Hi @ Konrad для меня работает очень хорошо! Вы в нормальной форме? Какая организация? CRM Rollup? Это очень странно. –

+0

RU12, он-лайн, ** любой ** субъект. Странно. –

+0

@Pedro Azevedo - ничего странного на самом деле, это потому, что Konrad запускает скрипты из консоли. Я привел более подробные сведения в своем ответе ниже. – SergeyS

ответ

4

Вы не сошел с ума, и ничего плохого с CRM и браузер тоже :)

Если вы работаете в JavaScript с помощью консоли браузера, вы находитесь в контексте window всей страницы. Однако содержимое форм CRM находится внутри contentIFrame iframe. IFrames фактически являются отдельными страницами, вы даже можете отредактировать ссылку, в которой этот iframe указывает на инструменты разработчика F12 на любую другую ссылку, которую вы хотите. Попробуйте изменить src атрибут в этом http://www.bing.com и вы увидите Bing домашней страницы в окне CRM (останется только лента):

<iframe title="This is IFrame" id="contentIFrame" src="http://www.bing.com" 
     style="width: 100%; height: 100%; border-top-style: none; 
       border-right-style: none; border-bottom-style: none; 
       border-left-style: none; display: inline;" > 

Вот почему вы не можете получить crmNotifications DOM элемента - потому, что при запуске JavaScript из консоли вы в контексте родительского окна. Когда вы укажете window.frames[0], он даст вам первый IFrame на странице (на самом деле это только один), внутри него вы сможете получить crmNotifications, потому что он есть.

Когда вы запускаете собственные скрипты, которые вы добавили с помощью настройки CRM, они связаны с внутренней страницей формы (на которую указывают IFrame), поэтому из этих сценариев вы можете получить crmNotifications напрямую, потому что вы уже на ' контекст содержимого.

+0

Привет @SergeyS спасибо за ваше объяснение очень полезно, но я выполняю ту же команду Konrad, и я получаю элемент div. Поведение, о котором вы говорите, относится только к UR12? –

+0

Нет, это не только для UR12. На какой странице вы это попробовали? Некоторые страницы в CRM не содержат внутренних IFrames. И btw какой браузер? – SergeyS

+0

+1 за отличный ответ. Тем не менее, я действительно помню, что я делал так, как описывает @PedroAzevedo, и он работал ** затем **. Возможно, была установка, которая скрывала от меня настоящую проблему ... –

3

Вы не сумасшедший, возможно, немного: D, если я хорошо вижу Уведомления - это класс, а не идентификатор. Идентификатор - crmNotifications. Я пишу уведомления, и у меня есть это link в моих закладках.

+0

Опечатка, опечатка там. Я имел в виду * crmNotifications *. Я все равно не получаю элемент.Смотрите, пожалуйста, мое редактирование. +1 за безумство. :) –

+0

Вы имеете в виду, что можете сделать это без * кадров *, например, @glosrob показывает ?! В IE ** и ** FF? Какая утка ?! (Предполагаемый тип.) –

+0

Если вы находитесь в контексте внутреннего IFrame, вы можете сделать это напрямую. Пожалуйста, загляните в мой ответ для получения более подробной информации. – SergeyS

1

Попробуйте

frames[0].document.getElementById('crmNotifications') 

По какой причине в IE вам нужно frames[0] немного. Это то же самое, если вы хотите использовать объект Xrm.

+0

А, я все забыл. Тем не менее - проверьте свои браузеры. Я получаю ** точно ** то же (мисс) поведение в FF тоже. Мне нужно использовать * frames *. Я неправильно помню или изменил это? И когда...? +1, конечно. –

+0

На самом деле ничего не изменилось, разница в том, откуда вы работаете javascripts (контекст). – SergeyS