我正在使用WAMP堆栈,并且我已经从我在网上找到的代码拼凑了一个自定义路由功能。这个想法是允许用户将他们的(或任何)用户名添加到网站根URL的末尾,并且路由器(index.php)将提取该用户名并提供定制的主页。在Firefox中一切正常,但在谷歌浏览器中,路由似乎搞乱了浏览器中的javascript函数调用。因此,html元素onclick=someFunction()
会在错误的网址中查找someFunction()
。
因此,例如,假设用户浏览我的网站,并将其用户名附加到网址,例如 - www.example.com/@bruce
。路由功能(请参阅下面的index.php)重定向到www.example.com/somePage.php?q=bruce
。提供了为Bruce定制的页面,但是当Bruce点击带有onclick
事件的元素时,Chrome会抛出错误:Uncaught TypeError: someFunction() is not a function at HTMLInputElement.onclick (VM509 somePage.php?q=@bruce:44)
任何想法如何解决这个问题,以便我仍然可以路由我的用户?
的index.php:
<?php
//Router
$uri = $_SERVER['REQUEST_URI'];
$user = "";
if(strpos($uri, "@") > 0) {
$user = substr($uri, strpos($uri, "@"));
}
//do a validation on the user name before redirecting
header('Location: somePage.php?q=' . $user); //hardcode url here on deployment
die();
?>
这是我的.htaccess文件,如果它是相关的(我从PHP路由的stackoverflow答案中复制了这个意思):
Options -MultiViews
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^ index.php [QSA,L]
编辑以在我的somePage.php中添加脚本路径,以防导致问题:
<head>
<meta http-equiv="content-type" content="text/html; charset=utf-8">
<title>SomePage</title>
<link rel="stylesheet" href="./somePage.css">
<script src="./somePage.js"></script>
</head>
答案 0 :(得分:0)
我在这里进行狂野狩猎 * wink * 。
未捕获TypeError:someFunction()不是HTMLInputElement.onclick中的函数(VM509 somePage.php?q = @ bruce:44)
这意味着该功能不在全球范围内。这意味着不存在具有此功能的脚本块。
确保包含someFunction
的脚本块位于somepage.php
。
答案 1 :(得分:0)
事实证明问题是我无意中在我的页面上有几个元素与id
相同。一旦我解决了这个问题,它就开始在Chrome中运行良好。有趣的是它最初在FF而不是Chrome中起作用。