复制wtikay - IE - currentStyle不应该更新

时间:2010-10-30 03:43:28

标签: html css internet-explorer

我试图用自己的代码复制http://wtikay.com/和其他各个地方的历史嗅探演示。 (这是一个很长的故事。)

我有一些在大多数旧版浏览器中可靠运行的东西(最新的Safari和Chrome版本以及Firefox 4测试版都有防御功能) - 但它在IE7或8中无效(未尝试6),我不能找出原因。当我更改href元素上的a属性时,IE似乎并不打算更新其渲染 - 但据我所知,这正是wtikay所做的,并且它有效。

测试文件:

<!doctype html>
<html><head>
<title>gevalt</title>
<style>
  body { background-color: gray }
  a:link { text-decoration: none; color: black }
  a:visited { color: white }
</style>
<body>
<span id="container"><a href="" id="testlink">test</a></span>
<a href="ftp://">minus</a>
<a href="http://www.google.com/">plus</a>
<script>
window.onload = function()
{
    var testlink = document.getElementById("testlink");
    var results = document.getElementById("results");
    var container = document.getElementById("container");
    var report = "";

    testlink.href = "ftp://";
    container.removeChild(testlink);
    container.appendChild(testlink);
    report += " -" + (testlink.currentStyle || window.getComputedStyle(testlink, "")).color;

    testlink.href = "http://www.google.com/";
    container.removeChild(testlink);
    container.appendChild(testlink);
    report += " +" + (testlink.currentStyle || window.getComputedStyle(testlink, "")).color;

    results.appendChild(document.createTextNode(report));
};
</script>
<pre id="results">
</pre>
</body></html>

在其运行的浏览器中,“test”和“plus”将为白色(假设您已在该浏览器中访问过www.google.com),单词“minus”将为黑色,并且将打印下面有“-rgb(0,0,0) +rgb(255,255,255)”之类的东西。在IE中,“test”将是黑色而不是白色,并且在其下方将显示“-black +black”。或者“test”可能是白色的,但在其下面会显示“-white +white”。这些都是失败。

非常感谢任何帮助。

1 个答案:

答案 0 :(得分:0)

对于记录:要在IE中进行此操作,您必须将<a>元素替换为全新的元素,每次您希望它注意到href中的更改,并且必须将新元素添加到文档中。

6,7和8就是这种情况;我没有尝试过v9测试版。

window.onload = function()
{
    var testlink;
    var results = document.getElementById("results");
    var container = document.getElementById("container");
    var report = "";

    testlink = document.createElement("a");    
    testlink.href = "ftp://";
    container.appendChild(testlink);
    report += " -" + (testlink.currentStyle || window.getComputedStyle(testlink, "")).color;

    container.removeChild(testlink);
    testlink = document.createElement("a");
    testlink.href = "http://www.google.com/";
    container.appendChild(testlink);
    report += " +" + (testlink.currentStyle || window.getComputedStyle(testlink, "")).color;

    results.appendChild(document.createTextNode(report));
};