ページモニタコンテナ実装記録

8036 ワード

タイトルを见て私も马鹿になって、感じはつまり私自身がすべて文识の义を见ることができないので、仕方がなくて、先に私に多くの笔墨を说明させます.
シーン:当社は别の会社のホームページゲームに加盟して、彼らは入り口を提供して、私达はユーザー名のパスワードのポイントを伝えて、入り口の検证を通じて(通って)后で、ゲームのページに回転します.ユーザーにとって、ゲームはうちの会社が提供したようで、違和感はありません.しかし、私たちの仕事にとって、問題があります.ユーザーが自分からゲームを終了しないでそこに掛けたり、自社のゲーム入口からログインしなくなったりした場合、しばらくの間、ユーザーのポイント残高は別の会社のプラットフォームに残っています.こちらでは毎日お会計をしなければなりません.そうすれば、勘定が合わなくなります.
難点:ドメイン間の問題を解決する必要があります.
ソリューション:自社側にコンテナページを提供し、兄弟会社からのコンテンツはこのコンテナ内に配置されます.コンテナ内のページが1時間(もちろん構成可能)で何の動きもない場合(マウスイベントが監視されていない場合)は、自分のプラットフォームに移動してページを閉じるか、ページが閉じられたときにポイントに移動する要求を発行します.
具体的な実装:
方案1:自分でサーバーの上の仲介を書いて、当社のページは本サーバーの上で兄弟の会社の内容を取得して、仲介は類似のホームページのつかみ方を通じてホームページの内容を取得して、このようにドメインをまたぐ問題を解決します.しかし、ゲームのページは複雑すぎて、多くのリソースはホームページのloadが終わってからloadしなければなりません.そして、経路の問題もあります.頭が痛いと思います.もういいです.
シナリオ2:iframeに完全に捨てる.問題は、IE 6/IE 7でサポートされているP 3 P(Platform for Privacy Preferences Project(P 3 P)specification)プロトコルが第三者のプライバシーのないセキュリティ宣言をデフォルトで阻止するクッキーであり、FirefoxではP 3 Pのセキュリティ特性がまだサポートされていないため、firefoxでは当然この問題は存在しない.解決策はhttp://www.cnblogs.com/SeaSun/archive/2013/02/05/2892817.htmlを参照し、埋め込むコンテンツ(iframeが指すサイト)にP 3 Pのホストヘッダ宣言を出力し、具体的に実現する
if (Request.Browser.Browser.ToUpper().Contains("IE"))
                Response.Headers.Add("P3P", "CP=CAO PSA OUR");


  a, Container.phpは、主にiframeを容器として含む.ここにはiframeが内容に合わせて自動的に大文字を調整する問題があり、いろいろなキックアスの案を参考にした後、兄の台の特別なお得な簡単さがあり、具体的には以下のページを参考にして、jsコードに関係なく、phpコードを削除した後、彼の簡単な実用的な解決方法です.jquery.iframetracker.jsはページを監視するライブラリに使用され、googleすることができます.getCredit.phpは積分取り戻しを処理するためのページである.
<?php

/**

 * Created by PhpStorm.

 * User: Administrator

 * Date: 14-7-1

 * Time:   3:31

 */

require_once ("./global.php");



$gameUrl=$_SESSION["gameUrl"];

$ar = array('gameUrl' => $gameUrl);



$html = <<<HTML

<head>

    <title></title>

    <style>

 
<!-- iframe -->
body { margin
-left: 0px; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; overflow: hidden; } </style> <script type="text/javascript" src="js/jquery.min.js"></script> <script type="text/javascript" src="js/jquery.iframetracker.js"></script> <script type="text/javascript" language="javascript"> var activeTime = new Date(); var interHMTime = 60*60*1000;//3600000 function onContentLoad(parameters) { setCwinHeight(); onContentClick(); }
///// iframe
function setCwinHeight() { var iframeid = document.getElementById("iframepage"); //iframe id if (document.getElementById) { if (iframeid&&!window.opera) { if (iframeid.contentDocument && iframeid.contentDocument.body.offsetHeight) { iframeid.height = iframeid.contentDocument.body.offsetHeight; } else if (iframeid.Document && iframeid.Document.body.scrollHeight) { iframeid.height = iframeid.Document.body.scrollHeight; } } } } function onContentClick() { //window.frames['iframepage'].document.body.onclick = function () { // activeTime = new Date(); //alert(activeTime.getMinutes()); //}; $("#iframepage").iframeTracker({ blurCallback: function(){ activeTime = new Date(); }, _overId: null }); } window.onbeforeunload = function (e) { window.open("getCredit.php", '_blank'); window.open("getCredit.php", '_self'); }; function monitor() { var curDate = new Date(); var differHMs = curDate.getTime() - activeTime.getTime(); // if (differHMs > interHMTime) { window.location.href = "getCredit.php"; } } setInterval(monitor,3600000); </script> </head> <body> <div id="container"> <iframe src="{$ar['gameUrl']}" marginheight="0" marginwidth="0" frameborder="0" scrolling="no" width="100%" height="100%" id="iframepage" name="iframepage" onload="onContentLoad()"></iframe> </div> </body> HTML; echo $html; ?>