2010-01-18 43 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'因为代替追加额外的元素,以''在技术上是无效的。 – 2010-09-18 06:40:26

+0

无法保证身体每次运行脚本时都会加载。此外,如果它*无效将节点添加到根节点,我会得到一个'DOMException.HIERARCHY_REQUEST_ERR'错误。 – 2010-09-18 19:28:01

0

我试着理解你的“问题”,但我想你想让它在新窗口中打开,对吧?

然后,你需要使用:javascript:window.open("<url to website>", "some title");

+0

不,我不会。 – 2010-01-18 02:38:31

0

如果document.write()被称为页面加载完成后,该页面的全部内容将被覆盖。这是该功能的预期效果。

如果要动态修改HTML代码,您有几种选择:

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

此外,你应该考虑像jQuery框架,它可以为你处理很多这样的事情:

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

个人而言,对于bookmarklets,我宁愿不使用任何第三方框架,并将'javascript('function(){})()'包装在''中以避免与页面上已有脚本的潜在冲突。这是学习纯粹的JavaScript派上用场的地方。 – slebetman 2010-01-18 02:16:11

0

耶以利亚说,或者如果你想改变浏览器的状态栏:

window.status = 'my new status' 
+0

请注意,我认为Firefox默认禁用此功能。 – alex 2010-01-18 01:37:30

+0

在Firefox中,您可以将disable_window_status_change设置为false – jspcal 2010-01-18 01:40:20