Trang chủTrang chủ Liên hệLiên hệ
PHP BASIC

» Events  » References  » Tutorials  » Hướng dẫn  RSS Feed2.0 Đăng ký | Đăng nhập

Dịch PHP Manual (đã dịch 86 /1248)
Thêm bài viết mới
#Thêm ý kiến
Emotion|Show / Hide

Tối qua về hì hục code, cuối cùng cũng fix được button back, nhưng tạm thời chỉ dùng cho IE, tôi đã thử trên FF nhưng do kinh nghiệm về nó còn ít (3 tuần)
nên không đạt được kết quả.
Sau đây là phần demo cho IE:
Đầu tiên mọi người tạo 5 file php để giả lập cho các trường hợp truy vấn MySQL
php1.php:
<? php
echo "Trang thứ nhất";
?>

  php2.php:
<? php
echo "Trang thứ hai";
?>

  php3.php:
<? php
echo "Trang thứ ba";
?>

  php4.php:
<? php
echo "Trang thứ tư";
?>
php5.php:
<? php
echo "Trang thứ năm";
?>

Còn đây là code cho trang chủ :
<?

<html><head><title>Fix Back</title>
<
meta http-equiv="content-type" content="text/html; charset=utf-8" >
<
meta http-equiv="cache-control" content="no-cache">
<
meta http-equiv="pragma" content="no-cache">
<
meta http-equiv="expires" content="0">
<
style type="text/css">
a:link {
  
width: 100%; color: blue; text-decoration: none
}
a:visited {
  
width: 100%; color: blue; text-decoration: none
}
a:hover {
  
width: 100%; color: red; text-decoration: none
}
</
style>
</
head>
<
body>
<
table id="ddwww" cellpadding=10 cellspacing=5 style="border-collapse: collapse" width=100% height=100%  border=1 >
<
tr>
<
td width="201px" align="left" bgcolor="#abcabc" valign="top">
<
a href="javascript:mAjax('php1.php')">Một</a><br>
<
a href="javascript:mAjax('php2.php')">Hai</a><br>
<
a href="javascript:mAjax('php3.php')">Ba</a><br>
<
a href="javascript:mAjax('php4.php')">Bốn</a><br>
<
a href="javascript:mAjax('php5.php')">Năm</a><br>
</
td>
<
td id="hienthi" align="center" valign="middle">
hic
</td>
</
tr>
</
table>
<
iframe name="amehistory" style="width: 0xp; height: 0px; display: none" width=0 height=0 border=0 ></iframe>
</
body>
<
script type="text/javascript" >
function
mioXmlHttpRequestObject()
{
           var
xmlHttp;
           if(
window.ActiveXObject){
                   try{
xmlHttp = new ActiveXObject("Microsoft.XMLHTTP");}
                   catch (
e){xmlHttp = false;}
                                   }
           else{
                   try{
xmlHttp = new XMLHttpRequest();}
                   catch (
e){xmlHttp = false;}
               }
           if (!
xmlHttp)alert("Có lỗi trong quá trình tạo đối tượng : XMLHttpRequest .");
           else return
xmlHttp;
}
var
xmlHttp = mioXmlHttpRequestObject();


function
mAjax(bv)
{
var
html  ='  <html>n';
  
html +='  <scr'+'ipt>n';
  
html +='  var memo="'+bv+'";n';
  
html +='  parent.mKetNoi(memo);n';
  
html +='  </scr'+'ipt>n';
  
html +='  </html>n';
  
amehistory.document.open();
  
amehistory.document.write(html);
  
amehistory.document.close();
}


var
lienket="";
function
mKetNoi(link)
{
lienket = link;
alert(link);
if  (
xmlHttp.readyState == 4 || xmlHttp.readyState == 0)
       {      
        
xmlHttp.open("POST",link, true)
        
xmlHttp.send(null);
        
xmlHttp.onreadystatechange = mHienThi;
         }
else
setTimeout('mKetNoi(lienket)', 1000);
}

function  
mHienThi()
{
if (
xmlHttp.readyState == 4)
   {
       if (
xmlHttp.status == 200)
       {
        
document.getElementById('hienthi').innerHTML=xmlHttp.responseText;
       }
       else {
alert("Có một số vấn đề trong quá trình truy cập vào cơ sở .");}
   }
}

</script>
</html>

?>


Vấn đề cốt lõi trong giải pháp của tôi là ở những dòng code này :

<?
<iframe name="amehistory" style="width: 0xp; height: 0px; display: none" width=0 height=0 border=0 ></iframe>
?>

<?
  
function mAjax(bv)
{
var
html  ='  <html>n';
  
html +='  <scr'+'ipt>n';
  
html +='  var memo="'+bv+'";n';
  
html +='  parent.mKetNoi(memo);n';
  
html +='  </scr'+'ipt>n';
  
html +='  </html>n';
  
amehistory.document.open();
  
amehistory.document.write(html);
  
amehistory.document.close();
}
?>

-------
Đây là phần cuối của công việc fix nút back.
Các bạn copy thêm trang <? response.php ?> cho phần demo :
<?php $lienket = $_GET['link']; ?>
<html>
<script type="text/javascript">
<?php echo "parent.mKetNoi('$lienket')"?>
</script>
<html>

Và sửa lại hàm mAjax thành như sau :

<?
function mAjax(bv)
{
if (
navigator.appName == "Microsoft Internet Explorer")
   {
   var
html =' <html>n';
      
html+=' <scr'+'ipt type="text/javascript">n';
      
html+=' parent.mKetNoi("'+bv+'");n';
      
html+=' </scr'+'ipt>n';
      
html+=' </html>';
      
amehistory.document.open();
      
amehistory.document.write(html);
      
amehistory.document.close();
   }
else
   {
  
amehistory.location.href = "response.php?link="+bv;
   }

}
?>

Bây giờ có thể chạy được trên cả 2 trình duyệt IE và FF.

Nói thêm :
Sau một thời gian tìm hiểu tôi thấy IE là hay nhất cho việc thiết kế. Nó có những phần tương tự Opera và Firefox.
Để fix nút back hoàn hảo các bạn nên code cho riêng từng trình duyệt. Và trong trang mà bạn định dùng ajax bắt buộc phải có 1 iframe hoặc là một frame:

Đối với Opera hoặc IE dùng duy nhất 1 iframe với 2 thuộc tính
style="width: 100%; height :100%;"
Sau đó dùng js viết thẳng dữ liệu vào khung này.

Đối với FF hoặc IE viết thêm 1 iframe có tính chất sau:
style="width: 0px; height: 0px; display: none"
và viết phần js dùng để hiển thị dữ liệu vào trong khung này giống như trên.

Như vậy các bạn có thể thấy riêng với IE chúng ta có 2 phương án thiết kế.

Nếu không muốn dùng iframe các bạn có thể dùng trực tiếp frame và nhớ đặt chiều cao cho nó = 0px.

Tác giả Uoon

Tác giả:NguyÅn Minh Tân

Show / Hide
#Thêm ý kiến

Add phpBasic to your browser's search box
Digg.com delicious Furl Google Bookmark Reddit Slashdot Yahoo My Web

Tableless template Framework PHP functions
 


XHTML Standard
Xây dựng & phát triển bởi tất cả các thành viên.
Powered by http://phpbasic.com