在浏览器中重新加载标签内容

时间:2014-02-03 07:47:33

标签: javascript jquery html browser

如何重新加载特定的浏览器标签内容?我搜索的解决方案不仅仅是在JQuery中(如果有更多解决方案,我更喜欢它。)

我需要这个:
我的页面上有很多链接在另一个页面上(链接格式为http://domain_name.cz/?still_same_text=1_1_1_1_1_1386662409;另一个页面有这个链接:http://domain_name.cz/?still_same_text=1_1_14_1_2_1387231396等等。每个链接只有相同的格式到第一个数字)。当我第一次点击一些链接然后我加载新标签(对于这个文本我说他只是“tab2”)如果我再次点击另一个链接然后我重新加载这个“tab2”(=我在这个“tab2”中更改网址current to new =>我在此选项卡中加载新的conent。) 有没有办法做到这一点?

我尝试this主题的解决方案,但这对我不起作用,我的意思是,我遇到了困难。我在this主题中查看解决方案,但这是另一个问题。有一个链接,但我可以有更多的链接,JS中有链接,但我需要用PHP生成它们。

2 个答案:

答案 0 :(得分:0)

我之前没有这样做,但问题似乎很有趣。因此,如果您提到的答案不起作用,那么我会尝试以下概念,它可能不是最好的,但它是一些东西。

1-在服务器上创建一个跟踪器(在会话中正确)以跟踪用户已打开的页面。因此,每当用户打开页面时,发出ajax请求,发送带有随机生成的id号的页面URL,以便稍后存储和检查。 每个标签都会显示不同的ID。

2-在所有等待来自服务器的命令的页面中添加javascript侦听器。根据服务器响应,这些监听将执行以下操作:

  • 没什么 - >以防第一次打开页面。

  • Close tab - >以防打开具有相同链接的新选项卡。因此,请保留新标签并关闭旧标签。 //或者关闭新的并刷新旧的?

  • Update - >更新服务器一旦打开选项卡(直接在页面加载时),只需before they get closed,发送页面URL和当前选项卡ID以在服务器上进行检查。

  • 继续检查服务器,如果打开了具有相同网址的较新选项卡,则关闭当前。

我不确定这个解决方案是否适合你,所以我只会写一个伪代码。如果它适用,那么稍后可能会改善它。

伪代码php:tabControl.php

//session array structure 
//when a new tab is added, it will take the following index of current url array. So later we can know which one is 
//$_SESSION["tracker"][ current url  ][ tab id]  newer id will be added to the array in an ascending order, not based on their value, so later we can check which tabId came later. 

$action = $_POST["action"];
$tabId = $_POST["id"];
$tabUrl = $_POST["url"];

if($action === "check")
 { 
    processTab(tabUrl , $tabId);  
 }   
elseif($action === "closing")
 {
    closeTab(tabUrl , $tabId) ; 
 }   

 /*if this a second tab opened with the same url, then echo the previous tab id and command the client to close self. 
  *if this the first tab, then store it in session. 
*/

function  processTab($tabUrl , $tabId)
{
   //if new, then pass it to addTab
  // else, check if there is a newer tab opened, then call closeTab
}

function addTab($tabUrl , $tabId)
{
   // add a new tab associated with tabUrl -> couter -> tabId
}

function  closeTab($tabUrl , $tabId)
{
   //set that $tabUrl with the id to null. 
   //and ask the client to close the tab.  //echo json_encode(array("responce"=>"closeSelf"))
}

从客户端,你可以使用类似于这个伪代码的东西:

//current tab id
var tabId = Math.floor((Math.random()*100)+1); 


    //On exit, just run once before user close the tab/window. 
    $(window).unload(function(){
        $.ajax({
            type: 'POST',
            url: 'tabControl.php',
            async:false,
            data: {"url":window.location.pathname , "action":"closing" , "id":tabId}
        });
    });

// keep checking  periodically 
    function checkTabs()
    {
        //On load, just run once
            $.ajax({
                type: 'POST',
                url: 'tabControl.php',
                data: {"url":window.location.pathname , "action":"check", "id":tabId},
                type:"json",
                success:function(data)  
                        {
                          if(data.responce === "closeSelf")
                               {// if the user detected that there is a newer with this url opened. 
                                  window.close();
                               }
                        }
            }).always(function(){ setTimeout(checkTabs, 1000);});

    }

checkTabs();// to call for the first time. 

希望这会有所帮助。

答案 1 :(得分:0)

事实上,如果您使用适当的技术,这不是一个难题。可以使用浏览器SDK控制特定浏览器选项卡,浏览器SDK可以访问选项卡管理。 JavaScript或PHP本身无法访问特定标签,因为它会导致安全漏洞。

Google Chrome的示例:

查看chrome.tabs参考。您可以使用标签执行许多操作,包括您要执行的操作。例如,显示可以控制浏览器标签的链接的用户友好方式是使用browser popup(注意,这与传统弹出窗口不同,浏览器弹出窗口是& #34;内部"浏览器级弹出窗口,建议此特定区域可以控制浏览器的任何部分,而不是仅当前页面),其中包含链接。在那个弹出窗口中,你可以有这样的东西:

浏览器弹出窗口(HTML):

<a id="myLink" href="http://wwww.google.com">This link will control a new tab</a>

浏览器弹出窗口(JavaScript):

var tabNumber;
var tabCreated = false;

document.getElementById("myLink").addEventListener("click", function(){
    if (!tabCreated) {
        // create a new tab
        chrome.tabs.create({
            url: this.href
        }, function(tab) {
            tabNumber = tab.id; // return ID of created tab
            tabCreated = true;
        });
    } else {
        // reload the created tab
        chrome.tabs.reload(tabNumber, null);
    }
}, false);

您的规范的最大问题是必须为每个浏览器单独实现这种机制,并且需要安装插件。如果链接是唯一的浏览器级访问,则应考虑更改其行为,以便他可以成为当前页面行为的一部分。

希望这有帮助! : - )