我正在尝试编写视口识别器代码。
每当新用户进入网站时,都会检查屏幕宽度,为用户提供匹配的导航栏(手机或电脑)。当它低于 768px 时,设备被归类为移动设备,否则它是 PC。然后数据会自动输入到具有隐藏输入的表单中。 要将这些值发布到 PHP,我使用带有表单数据的获取语句并将其发送到执行以下操作的 PHP 文件:
为了给用户匹配的导航栏,我只检查会话变量 isMobile, 但无论如何: 第一次加载时我没有导航栏, 在第二次加载时,我总是在每台设备上获得移动导航栏。 这很奇怪,我认为这很有趣让我们问吧。
<?php
session_start();
?>
<script>
window.addEventListener("load", async function(){
if (typeof isMobileJSVar == "undefined" || isMobileJSVar == null){
function determineIfIsMobile(){
let screenWidth = screen.width;
let isMobileDevice;
//Verhindern des erneuten Formular Übermittlungs-Dialog
if ( window.history.replaceState ) {
window.history.replaceState( null, null, window.location.href );
}
//Feststellen des Wievport WIdths
switch(screenWidth){
case (screenWidth <= 768) : isMobileDevice = true;
return isMobileDevice;
break;
case (screenWidth > 768) : isMobileDevice = false;
return isMobileDevice;
break;
default : isMobileDevice = false;
return isMobileDevice;
break;
}
}
//Elemente initialisieren
let isSubmitted = false;
let isMobileHelperURL = "./wp-content/themes/almondotheme/template_parts/outsourcedPHP/isMobileHelper.php";
let isMobileMiddleManTextElement = document.getElementById("isMobileMiddleManText");
let isFirstLoadHelperELement = document.getElementById("isFirstLoadHelper");
let mobileMiddleManFormElement = document.getElementById("mobileMiddleManForm");
let isUserMobile = determineIfIsMobile();
//Kommunikation mit PHP mittels Fetch
function isMobile(){
isMobileMiddleManTextElement.value = isUserMobile;
fetch(isMobileHelperURL,{
method: 'POST',
body: new FormData(document.getElementById('mobileMiddleManForm')),
})
.then(returnedisMobileJSON=>{
return returnedisMobileJSON.json();
})
.then(parsedisMobileJSON=>{
var setHelperInputsFunction= function() {
document.getElementById("isFirstLoadHelper").value = parsedisMobileJSON.isFirstLoad;
document.getElementById("isMobileMiddleManText").value = parsedisMobileJSON.isMobile;
}()
})
let isFirstLoadJSVar = document.getElementById("isFirstLoadHelper").value;
let isMobileJSVar = document.getElementById("isMobileMiddleManText").value;
alert(isMobileJSVar);
};
isMobile();
}
})
</script>
这是 php 文件提取,将表单数据发送到:
<?php
session_start();
$isMobileArray = array();
if(isset($_SESSION["isFirstLoad"])){
$_SESSION["isFirstLoad"] = false;
$isMobileArray["isFirstLoad"] = $_SESSION["isFirstLoad"];
}
else{
$_SESSION["isFirstLoad"] = true;
$isMobileArray["isFirstLoad"] = $_SESSION["isFirstLoad"];
}
if(!(isset($isMobileArray["isMobile"]))){
$_SESSION["isMobile"] = $_POST["isMobileMiddleManText"];
$isMobileArray["isMobile"] = $_POST["isMobileMiddleManText"];
}
else{
$_SESSION["isMobile"] = $_POST["isMobileMiddleManText"];
$isMobileArray["isMobile"] = $_POST["isMobileMiddleManText"];
}
$JSONToReturn = json_encode($isMobileArray);
echo $JSONToReturn;
?>
在我刚做的网站的导航栏区域
<?php
//Check ob Mobilgerät
if(isset($_SESSION["isMobile"])){
if ($_SESSION["isMobile"] == true){
get_template_part("./template_parts/navigation_mobile");
}
else{
get_template_part("./template_parts/navbar_pc.php");
}
}
else{
get_template_part("./template_parts/navbar_pc.php");
}
?>
但是在第一次加载时我没有导航栏,在第二次加载时我总是得到移动导航栏。 奇怪,不是吗?
感谢您抽出宝贵时间, 祝你有个愉快的星期天,
你的Alwin.