我使用以下代码每30秒自动获取/设置最新页面标题:
<script type="text/javascript">
setInterval(function() {
var data = "http://mysite.com/mypage.php";
$.get(document.location.toString()).then(function (data){
//find and set the title of the page
document.title = data.match(/<title>(.+)<\/title>/)[1];
});
}, 30000);
</script>
除了包含&符号的标题外,它的效果很好。这些负载正常,然后在30秒后更换为:
&
所以如果页面标题是:
Fun & Games
30秒后,它变为:
Fun & Games
由于
答案 0 :(得分:4)
不要使用正则表达式来提取标题,而是尝试向DOM询问返回页面的标题是什么。问题是,在您的文件中,它是&
,但一旦解析它就变成&
。
$.get(document.location.toString()).then(function (data){
//find and set the title of the page
document.title = $(data).filter('title').text();
});
答案 1 :(得分:3)
我假设您的原始HTML源代码类似于<title>Fun & Games</title>
,这应该是有效的。
浏览器处理它时很好,因为它会将&
理解为&符号。
但是,在JavaScript的上下文中,设置document.title
是一个纯字符串,而不是HTML解析的字符串。因此,&
不会被解释,并保持原样。
就个人而言,我的“工具箱”中有一个名为unHTMLref
的函数,定义如下:
window.unHTMLref = function(str) {
if( !str) return str;
var d = document.getElementById('__unHTMLref');
if( !d) {
d = document.createElement('div');
d.id = '__unHTMLref';
d.style.display = "none";
document.body.appendChild(d);
}
d.innerHTML = str.replace(/</g,'<');
return d.firstChild.nodeValue;
};
这将解码所有HTML实体,并返回解析后的字符串。
答案 2 :(得分:1)
'&amp;'的问题就是它在'&amp; amp'。您应该使用开发人员工具检查元素以查看它是否实际为Fun &amp; Games
,在这种情况下,这是您正在使用的替换功能的问题,因为它没有检查是否有'放大器;”在找到'&amp;'之后。
在这种情况下,使用indexOf和一些if语句来确保你没有修复那些没有被破坏的东西。
如果这不是问题,请确保使用的是.html()函数,而不是.text()函数。
答案 3 :(得分:-2)
<script type="text/javascript">
setInterval(function() {
var data = "http://mysite.com/mypage.php";
$.get(document.location.toString()).then(function (data){
//find and set the title of the page
document.title = data.match(/<title>(.+)<\/title>/)[1].split("&").join("&");
});
}, 30000);
</script>
// BONUS: generic de-html escaping in JS:
o=document.createElement("div");
o.innerHTML=(" this & that");
o.textContent // === "this & that"