动态地包含基于浏览器功能的PHP

时间:2012-07-10 01:14:58

标签: php javascript html5 xhtml include

REWRITE

我有一个用HTML5编写的网站,以及用XHTML编写的同一个网站。我想基于某人是否使用支持HTML5的一些最基本功能的浏览器来呈现一个或另一个。

注意

该网站不使用HTML5的画布,音频或视频功能。它只是用旁边,部分,导航等标记,并使用一些CSS3的有趣功能来设计装饰。 HTML5网站和XHTML网站之间的差异很小,如果我可以做到这一点,可能几乎没有人注意到。内容是相同的,只是略有不同。

我这样做的原因

一旦恐龙浏览器消失了,我希望我可以简单地发布HTML5网站,并取消旧的XHTML。

我遇到了一些后勤障碍,并没有完全阐述我想怎么做。我最初有想法使用Javascript条件语句来确定要包含哪些PHP包含。是的,继续笑,我可能也会有一天。在调查时,一个人评论说XML可能会使这成为可能。我对Javascript,PHP和XML非常有能力。这是我第一次尝试将Javascript与PHP集成,所以现在我明白为什么我原来的计划需要更多的工作。

最终,我非常强烈地感觉到这就是我想要前进的方式。我读到渐进增强与优雅降级,但我已经决定,我想给我的客户一个漂亮的网站使用所有新的语义标签和简单的样式选择器来增加搜索引擎优化,并保证当HTML4消失时,这个新网站将站立对时间的考验......至少在一段时间内。

如果你强烈反对这种方法,我愿意听你说的话。请以任何方式分享您的想法。

2 个答案:

答案 0 :(得分:2)

No.No.No.No.No!

两点:

  1. 使用HTML5 shiv - 为旧的IE浏览器提供HTML5功能)
  2. Progressive enhancement - 您不应为不同的浏览器编码。您的代码应该在所有浏览器中运行。然后添加增强但不需要网站运行的功能的用户体验。

答案 1 :(得分:2)

你要求的是不可能的;正如我已经解释的那样,PHP是服务器端的,JS是客户端的;任何完成php端的事情都是在页面传递给用户的时候完成的,所以js不可能影响php端,除非你的网站或内容传递在ajax中完全完成,是一种使用js和php检索信息的方法;简而言之,js向您服务器上的另一个php页面发送请求并返回结果。

然而,这要复杂得多,在你更熟悉JS和PHP之前我不推荐它。

然而,除此之外,PHP中有一个解决方案,虽然我现在还没有完整的代码。

解决方案是get_browser()的php 4和5函数:

$arr = get_browser(null, true);
$var = "some browser";
if ($arr['parent'] == $var) {
   require('/php/file.php');
}
else {
   //etc
}

以上是你的答案更新之前;关于上述更新,我没有其他说法。

更新:关于以下关于ajax的评论之一,我将尝试一个例子。我不会试图称之为简单',因为ajax不过是......但是回到了这一点......

HTML:

<html>
    <body>
        <div id="main_body">
        </div>
    </body>
</html>

JS:

//some code to determine user-agent/browser, set variable 'agent' with result
var use_html5;
if (agent == browser) {
    use_html5 = 'yes'
}
else {
    use_html5 = 'no'
}

function retrv_body() {
    if (window.XMLHttpRequest) {// code for IE7+, Firefox, Chrome, Opera, Safari
        xmlhttp=new XMLHttpRequest();
    }
    else {// code for IE6, IE5
        xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
    }
    xmlhttp.onreadystatechange=function() {
        if (xmlhttp.readyState==4) {//readState 4 is when the request has finished;
            //0: request not initialized 
            //1: server connection established
            //2: request received 
            //3: processing request 
            //4: request finished and response is ready
            document.getElementById('main_body').innerHTML = xmlhttp.responseText;
            //set html of div with id 'main_body' to rendering retrieved from php_file_in_same_dir.php
        }
    }
    xmlhttp.open("POST","php_file_in_same_dir.php",true); 
    //set type of form, boolean is in regards to whether the request is asynchronus or synchronous
    //most ajax requests are async, which means they themselves finish executing usually after the function itself has run.  I'm not truly knowledgeable regarding this specific thing since I've only ever used async requests, though I would assume being a sync request would mean the function actually waits until it returns a value before it finishes executing.
    xmlhttp.setRequestHeader("Content-type","application/x-www-form-urlencoded");
    //set the headers of the content.
    xmlhttp.send("html5=" + use_html5);
    //finally, send the data.  Depending on the data, the data may need to be url-encoded.
}

retrv_body();

PHP:

<?php
if ($_POST['html5'] == 'yes') {
    include('body5.php');
}
else {
    include('body_other.php');
}
//body generating code, render page.
?>

以上只是一个例子,我不建议实际使用它,保存retrv_body()功能,并将其更改为您可以真正使用的功能。

希望我在代码中提出的意见有助于理解;如果有任何问题需要回答,请随时向我解释一下。