Ryf*_*lex 10 javascript php iframe jquery postmessage
我正在尝试找到一种解决方案,以允许网站通过iframe知道用户使用的URL。
网站1 :( http://website.website.com
远程网站,只能将javascript和html添加到网页中)
网站2 :( https://example.com
完全可编辑,php,html,js等)
当前代码:(属于网站2(Example.com)
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml" lang="en-US" prefix="og: http://ogp.me/ns# fb: http://ogp.me/ns/fb#">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
<title>Website.com</title>
<meta name="viewport" content="width=device-width, initial-scale=1"/>
<script src="https://code.jquery.com/jquery-1.11.3.min.js"></script>
</head>
<body class="body_blank">
<script type="text/javascript">
jq = jQuery.noConflict();
jq(document).ready(function() {
var currentFramePath = '';
var iframe = '<iframe src="{src}" id="#iFrameContainer" style="position:fixed; top:0px; bottom:0px; right:0px; width: 100%; border: none; margin:0; padding:0; overflow: hidden; z-index:999999; height: 100%;">';
var urlFrame = getUrlParameter('currentFrame');
if(urlFrame != null && urlFrame != ''){
console.log("Frame not found");
jq('#iFrameContainer').html(iframe.replace('{src}', urlFrame));
currentFramePath = urlFrame;
}
jq('#iFrameContainer').click(function(){
console.log("Clicked in frame");
currentFramePath = jq(this).attr('href');
console.log(currentFramePath);
});
setInterval(function(){
window.location = window.location.href.split('?')[0] + '?currentFrame=' + currentFramePath;
console.log("Update Query");
}, 5000);
});
function getUrlParameter(sParam) {
var sPageURL = decodeURIComponent(window.location.search.substring(1)),
sURLVariables = sPageURL.split('&'),
sParameterName,
i;
console.log("Get Query");
for (i = 0; i < sURLVariables.length; i++) {
sParameterName = sURLVariables[i].split('=');
if (sParameterName[0] === sParam) {
return sParameterName[1] === undefined ? true : sParameterName[1];
}
}
};
</script>
<div id="wrapper" class="wrapper_blank">
<iframe src="http://website.website.com" id="#iFrameContainer" style="position:fixed; top:0px; bottom:0px; right:0px; width: 100%; border: none; margin:0; padding:0; overflow: hidden; z-index:999999; height: 100%;">
</div>
</body>
</html>
Run Code Online (Sandbox Code Playgroud)
如果我刷新页面(iframe),example.com
则会刷新并忘记用户正在/正在访问的页面...
如您所见,我试图通过iFrame检测他们的页面来使其正常工作,但是由于它位于不同的域,因此这是不可能的。
我正在寻找某种解决方案来执行如下所述的操作,但请记住,可能会有更好的解决方案。
我希望网站website.website.com
获取用户所在页面的当前路径/ URL(正在通过iframe进行查看),并通过该路径/ URL发送至example.com
example.com,以更新会话/临时Cookie /临时本地存储/变量...等,这将意味着它将调整查询字符串,以在用户刷新其页面时将自身指向正确的URL,从而使刷新正确地记住他们所在的页面。
我试图postMessage
通过将以下代码放在各自的站点上来使用该功能:
网站1附加代码
<script type="text/javascript">
setInterval(function() {
parent.postMessage(window.location.pathname, "https://website.com");
},1000);
</script>
Run Code Online (Sandbox Code Playgroud)
网站2附加代码:
var eventMethod = window.addEventListener ? "addEventListener" : "attachEvent";
var eventer = window[eventMethod];
var messageEvent = eventMethod == "attachEvent" ? "onmessage" : "message";
eventer(messageEvent, function(e) {
console.log('Parent Message: ', e.data);
}, false);
Run Code Online (Sandbox Code Playgroud)
但是没有任何反应,没有控制台消息或错误……什么也没有。
我什至尝试过复制https://blog.teamtreehouse.com/cross-domain-messaging-with-postmessage之类的东西,但没有任何帮助:(
有什么想法我做错了什么以及解决该问题的方法吗?
谢谢
我在http://website.website.com内尝试了以下js,但没有用:
localStorage.setItem('CurrentURLChecker', window.location.href)
if (localStorage.getItem('CurrentURLChecker')) {
if (window.parent.location.href == "https://website.com/" ) {
console.log("URL FOUND");
}
}
Run Code Online (Sandbox Code Playgroud)
未捕获的DOMException:阻止了源为“ http://website.website.com ” 的框架访问位于http://website.website.com/:251:44的跨域框架
网站1 =“ http://stackoverflow.serviceprovider.com ”
网站2 =“ https://stackoverflow.com ”
网站2包含一个iframe,可准确显示网站1所显示的内容。
我永远不会访问网站1,所有点击都是在网站2上完成的
如果我要单击iframe内的链接,然后导航至:http : //stackoverflow.serviceprovider.com/this-new-page/,则网站1应该能够检测到这一点并存储iframe的位置并记住它。
现在,如果我刷新浏览器,而不是将iframe加载到http://stackoverflow.serviceprovider.com,它将加载他们实际刷新的页面,即http://stackoverflow.serviceprovider.com/this-new-page/
选项卡/窗口URL将始终保留在https://stackoverflow.com/上,但是有必要附加查询字符串,以便使链接可共享。
就这么简单。
由于您可以将 javascript 添加到网站 1 ( http://website.website.com
),因此您可以使用 javascript 创建会话并将用户访问的当前页面保存在 cookie 中(如此处所述)。当用户访问网站的主页时(当用户重新加载网站 2 时发生这种情况),您可以使用 javascript 获取此值并加载保存的页面 ( window.location.href = 'http://website.website.com/YourSavedPage'
)。
如果您不希望每次用户访问网站 1 的主页时都进行重定向,您可以考虑创建一个自己的页面,将用户重定向到最后打开的页面,并在加载 iframe 时打开该页面一次。