Chrome的JavaScript问题

时间:2009-12-28 02:36:47

标签: php javascript google-chrome

我不确定这是特定于Chrome的,但确实如此。这适用于所有其他浏览器,包括所有IE *浏览器等。事实上,这里没有特定于客户端的代码。所有这些都是在服务器上生成的。然而,在清除了Chrome的缓存一百万次并重新启动它之后......以下内容无效:

<script type="text/javascript">

// BEGIN PARAMETERS 
<?php 
    if (isset($someid) && $someid == 'foo') {
        echo "var somevar = 'foo';\n";
    } else {
        echo "var somevar = '#';\n";
    }
?>
var invisible = '#';
var text_counter = '#';
// END PARAMETERS 
</script>

在每个来自$ someid =='foo'的浏览器上,var显示正确,它在查看source后显示为var somevar ='foo'; Chrome始终只显示var somevar ='#'; ...不确定原因。

我还把它扔进了嵌入javascript的页面:

<?php
  echo "someid: {$someid}\n";
?>

并验证$ someid确实是foo。然而第二个其他阻止命中,仅在chrome上。

更新:我注意到当我右击Chrome并点击'Inspect Element'时,CORRECT var somevar值就在那里。仅在View Source中,它没有正确设置。这真的很奇怪,考虑到在初始HTTP GET之后修改DOM的正常行为,这不是这里的情况。没有任何XHR或时髦的DHTML发生。只是一个HTTP GET,上面的代码就是在GET请求上处理的。

3 个答案:

答案 0 :(得分:2)

无论出于何种原因,$ someid要么未设置,要么不完全等于“foo”。除非你展示设置变量的方式和位置,否则没有人能说出为什么会在一个浏览器中发生,而不是另一个浏览器。也许有一个空间或其他看不见的角色,当你回应它时仍然看起来像“foo”,但实际上并不是“foo?”

答案 1 :(得分:1)

要确定问题,请在HTML中尝试:

echo '<pre>"' . $someid . '"</pre>';

这将预先格式化文本,以便您可以看到任何字符,包括空格。我打赌在参数值之后有一些空格,以便它显示为

"foo "

这当然不等于“foo”。

如果这实际上是根本原因,我建议优化您的请求参数处理事物。您可能会发现trim()函数很有价值。

答案 2 :(得分:0)

由于我无法想到为什么它会特定于浏览器,我会假设你在Chrome中做某事(点击链接,提交表单等)以生成对页面的请求问题是,$someid的值以某种方式取决于请求参数。

如果$someid直接由请求参数设置,请检查以确保Chrome发送的值真的只是'foo'而不是'foo \ n',' foo \ 0','foo',或者对我们来说只是'foo'的任何其他价值仅仅是人类。

如果必须,请打破HTTP流量嗅探器(Fidder对于Windows来说是一个非常好的免费嗅探器)并查看Chrome中的内容。