2013-07-19 5 views
2

Я пытаюсь реализовать функциональность закладки почти кросс-браузер и нашел это на SO: How do I add an "Add to Favorites" button or link on my website?Uncaught TypeError: Объект # <HTMLDivElement> не имеет метода «addPanel»

Теперь я использую @ ответ PHPst в. .

<script type="text/javascript"> 
$(function() { 
    $("#bookmarkme").click(function() { 
     if (window.sidebar) { // Mozilla Firefox Bookmark 
      window.sidebar.addPanel(location.href,document.title,""); 
     } else if(/*@[email protected]*/false) { // IE Favorite 
      window.external.AddFavorite(location.href,document.title); 
     } else if(window.opera && window.print) { // Opera Hotlist 
      this.title=document.title; 
      return true; 
     } else { // webkit - safari/chrome 
      alert('Press ' + (navigator.userAgent.toLowerCase().indexOf('mac') != - 1 ? 'Command/Cmd' : 'CTRL') + ' + D to bookmark this page.'); 
     } 
    }); 
}); 
</script> 

он работает на простой веб-страницы .. как показано здесь: http://jsfiddle.net/GXas4/

но когда я использовать его внутри WordPress шаблон, в хроме я получаю ошибку JS, как это:

Uncaught TypeError: Object #<HTMLDivElement> has no method 'addPanel' 

он не возвращает ошибку на консоли firefox, но ничего не делает.

У многих сообщений на SO есть вопросы, начинающиеся как это ('Uncaught TypeError: Object # не имеет метода'), но ничто, кажется, не указывает мне в правильном направлении.

У кого-нибудь есть идея, почему это происходит?

ответ

1

Возможно, что тема WordPress, которую вы используете, имеет элемент с id = sidebar.

Если глобальная переменная с тем же именем не определена, глобальная переменная будет создана для каждого элемента с идентификатором.

Итак, первое испытание ненадежно. Например, оценка window.sidebar на странице stackoverflow будет верна даже в Chrome, потому что на веб-сайте используется элемент с таким идентификатором.

+0

да, есть #sidebar, так как, по-вашему, я могу обойти эту проблему? EDIT: я попробую это на jsfiddle .. – reikyoushin

+0

на самом деле, вы правы .. http://jsfiddle.net/hwZsa/1/, но как я могу отредактировать этот код для работы на странице с #sidebar? – reikyoushin

+1

Измените первый тест на '(window.sidebar &&! (Window.sidebar instanceof Node))' – sabof

0

Вы должны использовать wp_enqueue_script (Documentation)

Ваши зависимости не может быть вызван до этого сценария. Если вы епдиеий скрипт, который вы можете сделать загрузку зависимостей первого использованием

wp_enqueue_script($handle, $path to file, array(jquery));` 

Поскольку я поместил JQuery в массиве теперь будет загружать JQuery перед сценарием.

+0

единственная зависимость необходима на этом скрипте JQuery, и он уже загружен (по умолчанию на WordPress), прежде чем я выполнить этот скрипт .. Я также скорректировал этот код на wordpress, чтобы использовать jQuery() вместо $(), чтобы избежать конфликтов .. – reikyoushin

+0

jquery также работает уже .. проблема в функции, вызванной jquery .. кажется, jquery имеет связанный с объектом окна намного выше кода и где-то переопределил оконный объект. – reikyoushin

0

addPanel была удалена из Firefox, так как v 23. Но вы можете использовать разметку вместо:.

<a href="http://stackoverflow.com" title="Stack Overflow" rel="sidebar">Bookmark me</a> 
Смежные вопросы