我使用以下方法打开带有一些页面内容的new tab(在new process中),
var p = document.getElementById("myElement");
var a = document.createElement('a');
a.setAttribute('href',".../mypage.html");
a.setAttribute('rel',"noreferrer");
a.setAttribute('target',"_blank");
p.appendChild(a);
a.click();
http://news.softpedia.com/news/force-google-chrome-to-open-links-in-new-processes-128962.shtml
这起作用了,新的选项卡打开了mypage.html内容。
假设这是myPage(只是示例...)我应该如何访问它?
<!DOCTYPE html>
<html>
<body>
<h1> Heading</h1>
<p> paragraph.</p>
<button type="button">Click Me!</button>
</body>
</html>
现在让我们进入棘手的/高级:)部分...
当您使用window.open
(我不能使用)时,这非常简单,因为您可以使用各种技术。
1. using window object
2. post message
https://developer.mozilla.org/en-US/docs/Web/API/Window/postMessage
3. cookies
4. localStorage
但在这里,我打开了这个新页面,没有使用window.open获得的引用
我的问题是:
如果我想更改某些内容,如何访问这个新选项卡dom
父页JavaScript:
var lastMessage;
setInterval(function() {
var message = localStorage.getItem('message-to-parent');
if (message && message !== lastMessage) {
lastMessage = message;
// your code here
alert('There is a new message for you: ' + message);
}
}, 100);
子页JavaScript:
localStorage.setItem('message-to-parent', 'hello, my parent!');
如果您有很多动画和其他巨大的JS代码,我建议增加计时器间隔,或者更好地用window
来解决这个问题。
我遇到了一个类似的问题,并构建了一个小型库,使通过带有paramter的localStorage进行函数调用成为可能。你可以在这里找到。当前并非所有浏览器都支持Service worker。
下面是一个如何使用它的示例:
//Register a function:
RegisterLocalStorageFunction("test", function(param){
return param+param;
});
//Call a function:
let str = "testing";
CallLocalStorageFunction("test",str,function(para){
console.log(para);
});
在您的上下文中:
RegisterLocalStorageFunction("CallAlert", function(param){
alert(param);
return "Success";
});
var p = document.getElementById("myElement");
var a = document.createElement('a');
a.setAttribute('href',".../mypage.html");
a.setAttribute('rel',"noreferrer");
a.setAttribute('target',"_blank");
p.appendChild(a);
a.click();
在另一个窗口中:
<!DOCTYPE html>
<html>
<body>
<h1> Heading</h1>
<p> paragraph.</p>
<button type="button" onclick="btnClick()">Click Me!</button>
<script>
function btnclick(){
CallLocalStorageFunction("CallAlert","Hello from the other tab",function(para){
console.log("para");
});
}
</script>
</body>
</html>
双方必须位于同一域上,否则它们无法访问相同的本地存储。 <罢工> 使用github上的当前代码,我使用setInterval循环访问存储。 存在一个存储事件,该事件对所有其他选项卡和窗口激发,但不对同一选项卡激发。 <罢工> 我将重写lib以使用更干净的方法处理事件,但现在这应该起作用。
更新
在存储库中可以找到communicator2,它基于“storage”事件。
更新
下面是一个工作示例。请记住允许弹出窗口。
我正在寻找一种方法,如何在浏览器中的多个选项卡或窗口之间进行通信(在同一个域上,而不是CORS上)而不留下痕迹。有几种解决办法: 使用窗口对象 邮件后传 Cookies 本地存储 第一种可能是最糟糕的解决方案--你需要从你当前的窗口打开一个窗口,然后你只能在保持窗口打开的情况下进行交流。如果您在任何窗口中重新加载该页,则很可能会丢失通信。 第二种方法,使用postMessage,可能可以实现跨源通
问题内容: 我有两个窗口:窗口A和窗口B。 窗口A和窗口B具有相同的域 窗口A和窗口B没有任何父窗口。 问题: 窗口A是否可以获得窗口B的引用? 使窗口A通知窗口B的最优雅方法是什么? (包括新的HTML5规范) 我知道这样做的两种方式: 服务器发送消息:窗口B经常询问服务器,窗口A是否已通知某些内容 通过本地数据(HTML5)进行消息传递:当窗口A要通知其更改本地数据的内容时,窗口B会定期检查本
我已经搜索了很多关于如何使用SlidengTablayout在片段之间进行通信的内容,但还没有找到一个好的答案。我知道使用ActionBar,但我想要的是androidLollipop使用SlidingTabLayout的新方式。我试过了-
我正在学习本教程中的示例。根据教程,我想在两个选项卡之间拖动选项卡。到目前为止,我设法创建了这段代码,但我需要一些帮助才能完成代码。 来源 将选项卡的内容作为对象插入的正确方法是什么?简单的文本被转移到教程中。我必须如何修改这行< code>content.put(DataFormat。PLAIN_TEXT,tab pane);? 拖动选项卡后插入选项卡的正确方法是什么: 目的地 我想这个转移可以
问题内容: 我有一个表单,当我单击它时会在新选项卡中打开。当我尝试导航到该新选项卡时,我不断收到NoSuchWindowException。代码非常简单。“ myframe”是新标签中最终将被插入信息的框架。我应该再等吗? 问题答案: 感谢Debanjan(并为以后的回复表示歉意-刚回到办公室)。我能够通过使用解决此问题 我没有意识到,当我单击打开表单时,另一个窗口在后台非常短暂地打开,然后关闭。
我试着用: 但是Selenium Webdriver的焦点停留在第一个选项卡上,因为我认为它没有为新选项卡创建新句柄。 还有,试过这个: 任何帮助都很感激。谢了。