Букмарклет Google Docs вызывает сообщение об ошибке

#javascript #bookmarklet #google-docs

#javascript #букмарклет #google-docs

Вопрос:

Я обнаружил, что если вы попытаетесь изменить редактор Google Docs Word, добавив пользовательские скрипты, это вызовет ошибку в тот момент, когда текст переносится на новую строку или если вы нажмете enter.

Проблему можно повторить, включив любой скрипт или css в dom (пример ниже). Я пробовал это в Firefox 3.6 и Safari. Ошибка возникает, даже если файл js пуст.

Это серьезно затрудняет добавление букмарклетов в Google docs у кого-нибудь есть идеи, как этого избежать? … или это только у меня?

 javascript:d=document,e=d.createElement('script');e.src='http://www.domain.org/dummy.js';void(d.body.appendChild(e));
  

Ответ №1:

Я не смог воспроизвести проблему, как указано — внедрение скриптов работает для меня. Интересно, заботится ли Google Docs о DOM до такой степени, что неожиданные дополнительные элементы DOM каким-то образом портят его?

Одной из идей было бы добавить скрипт / стиль к <head> , а не к телу документа, вот так:

 javascript:(function(d,s){s=d.createElement('script');s.src='http://ajax.googleapis.com/ajax/libs/jquery/1.6.1/jquery.min.js';d.getElementsByTagName('head')[0].appendChild(s);})(document)
  

Надеюсь, это поможет!

Комментарии:

1. Спасибо jimbojw, я пробовал это. Я также обнаружил, что после загрузки скриптов вы можете фактически удалить их из заголовков, и код продолжит функционировать. Я надеялся, что смогу добавить их и удалить, если будут отслеживаться изменения DOM. Хотя кубиков нет.

Ответ №2:

В Google Docs уменьшен скрипт, что означает, что ваш набор переменных используется также при запуске Google docs, что означает, что Google docs пытается выполнить, в то время как переменные перепутаны. Используйте более длинные имена переменных, чтобы переменные не перекрывались (используйте слова для переменных).

Я понимаю, что это может быть на 12 лет позже.