如何重新加载特定的浏览器标签内容?我搜索的解决方案不仅仅是在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生成它们。
答案 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);
您的规范的最大问题是必须为每个浏览器单独实现这种机制,并且需要安装插件。如果链接是唯一的浏览器级访问,则应考虑更改其行为,以便他可以成为当前页面行为的一部分。
希望这有帮助! : - )