无法更改正文元素

时间:2016-10-03 16:42:49

标签: javascript bookmarklet

我想在点击时创建一个bookmarklet应该替换body标签中的html内容。我已经使用了document.writedocument.getElementByTag('body')[0].innerHTML =,但也都覆盖了head元素中的内容。

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Untitled Document</title>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.1.0/jquery.min.js"></script>
</head>

<body>

<a href="javascript:document.write('<h1>Hello</h1>');">Click here</a>

<a href="javascript:document.getElementsByTagName('body')[0].innerHTML='<h1>Hello</h1>'">Click here</a>
</body>
</html>

在不删除javascript库的情况下替换body标签html的方法是什么?

3 个答案:

答案 0 :(得分:1)

哦,这似乎是有效的,它看起来像一个谜题。

替换整个页面HTML(包括头元素,库等)使其工作:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Untitled Document</title>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.1.0/jquery.min.js"></script>
</head>

<body>

<a href="javascript:document.getElementsByTagName('body')[0].innerHTML='<html><head><script src=\'a\'></script></head><h1>Hello</h1>;return false;'">Click here</a>


</body>
</html>

答案 1 :(得分:0)

好的,这有点棘手,但我相信我弄清楚了。基本上我是怎么做到的,我去了一个简单的工作书签,在他们的decodeURIComponent()属性上做了href并根据你想要做的事情修改它。

让我知道它对你有用!

&#13;
&#13;
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">

<head>
  <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
  <title>Untitled Document</title>
  <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.1.0/jquery.min.js"></script>
</head>

<body>
  <a href="javascript:((function(){var s=document.createElement('script');s.setAttribute('type','text/javascript');s.setAttribute('charset','UTF-8');s.innerHTML = 'document.body.innerHTML = \'<h1>Hello</h1>\''; document.documentElement.appendChild(s);})());">click here</a>
</body>

</html>
&#13;
&#13;
&#13;

答案 2 :(得分:-1)

使用jQuery:

&#13;
&#13;
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<a href="javascript:$('body').html('<h1>Hello</h1>');">Click here</a>
&#13;
&#13;
&#13;

无jQuery方式:

&#13;
&#13;
<a href="javascript:document.getElementsByTagName('body').innerHTML = '<h1>Hello</h1>';">Click here</a>
&#13;
&#13;
&#13;