2010-01-18 4 views
1

Я пытаюсь создать свой собственный букмарклет, и для этого не существует большого количества руководств. В принципе, прямо сейчас я пытаюсь понять, почему я не могу просто сделать javascript: document.write («HAI, WORLD»), который имеет непреднамеренный эффект замены содержимого окна.document.write в строке состояния

Это мое понимание из других источников, что Javascript заменяет все содержимое окна возвращаемым значением метода, поэтому я также попробовал javascript: void (document.write ("wut")), но все окно содержимое по-прежнему заменяется.

ответ

6

Это потому, что страница уже загружена, и она не знает , где вы хотите написать. Используйте document.documentElement.appendChild(document.createTextNode("HAI, WORLD")).

+0

Вы должны использовать 'document.body' вместо добавления, так как дополнительные элементы для' ' является технически недействительным. –

+0

Нет никакой гарантии, что тело загрузилось всякий раз, когда он запускает свой сценарий. Кроме того, если он * был * недействителен для добавления узлов в корневой узел, я бы получил ошибку 'DOMException.HIERARCHY_REQUEST_ERR'. –

0

Я пытаюсь понять ваш «вопрос», но я думаю, что вы хотите открыть его в новом окне, не так ли?

Тогда вам нужно использовать: javascript:window.open("<url to website>", "some title");

+0

Нет, я бы не стал. –

0

Если document.write() вызывается после завершения загрузки страницы, все содержимое страницы будет перезаписана. Это предполагаемый эффект функции.

Если вы хотите изменить HTML-код на лету, у вас есть несколько вариантов:

  • document.getElementById("foobar").innerHTML("baz")
  • document.getElementById("foobar").appendChild(document.createTextNode("baz"))

Кроме того, вы должны смотреть в рамки, как JQuery, которые могут справиться с этим:

  • $("#foobar").html("baz")
+0

Лично для букмарклетов я бы предпочел не использовать сторонние фреймворки и обернуть свой javascript в '(function() {})()', чтобы избежать потенциального конфликта со сценариями, уже находящимися на странице. Именно здесь полезно изучение чистого javascript. – slebetman

0

да, как сказал Илия, или если вы хотите изменить строку состояния браузера:

window.status = 'my new status' 
+0

Заметьте, я думаю, Firefox отключает эту возможность по умолчанию. – alex

+0

в firefox вы можете установить disable_window_status_change на false – jspcal