情况是这样
1 用thinkPHP6 ,index控制器里面的index方法里面 有一个 方法
public function index(){
$paramdata = input();
$inviter = "admin";
if(empty($paramdata["share"])){}else{
$inviter = $paramdata["share"];
cookie('inviter', $paramdata["share"], 259200 );
}
}
比如我通过访问网址 9.p/index?share=ai01
如果直接访问是可以获取到这个share参数的。
但是 ,通过iframe 这样套一个框架就访问不了。
<iframe id="inlineFrameExample"
title="Inline Frame Example"
width="300"
height="200"
src="9.p/index/index/index?share=ai01">
</iframe>
这个框架是在另外一个域名下面,比如 8.p 的网站。
打开 8.p的网址, 这个时候,9.p这个网址就获取不到share的参数。
请问这种情况要怎么解决才能 继续 正常获得 share传递的参数。
8.p中iframe加载9.p中网址,服务器端获取参数是没问题的,是不是9.p设置了X-Frame-Options:Deny禁止框架加载了,导致9.p页面没加载
该回答通过自己思路及引用到GPTᴼᴾᴱᴺᴬᴵ搜索,得到内容具体如下:
这个问题的原因是浏览器在跨域的情况下默认不会将跨域iframe的URL参数传递给目标站点。可以采用以下两种方法解决:
1、 通过设置 document.domain
实现同域
在你的 HTML 页面中,可以通过设置 document.domain
来实现两个域名的“同域”,从而让浏览器将 URL 参数传递给目标站点。具体方法如下:
document.domain = '8.p';
document.domain = '8.p';
这样,两个站点的 document.domain
都设置为相同的值,浏览器就认为它们处于同一个“域”中,就能够正常传递 URL 参数了。
2、 通过消息传递实现跨域传递参数
在你的 HTML 页面中,可以使用 JavaScript 的 postMessage()
方法实现跨域消息传递。具体方法如下:
在 8.p 的网站中,可以这样设置:
<iframe id="inlineFrameExample"
title="Inline Frame Example"
width="300"
height="200"
src="9.p/index/index/index">
</iframe>
<script>
var iframe = document.getElementById('inlineFrameExample');
iframe.contentWindow.postMessage('ai01', 'https://9.p');
</script>
在 9.p 的网站中,可以这样设置:
window.addEventListener('message', function(event) {
if (event.origin !== 'https://8.p') {
return;
}
var inviter = event.data;
cookie('inviter', inviter, 259200);
}, false);
这样,当 8.p 的网页加载时,会向 9.p 发送一个消息,消息内容为 ai01
。当 9.p 的网页收到这个消息时,就会将 inviter
的值设置为 ai01
,并存入 cookie 中。这样就实现了跨域传递参数。
如果以上回答对您有所帮助,点击一下采纳该答案~谢谢
试试这样呢
<IfModule mod_rewrite.c>
Options +FollowSymlinks -Multiviews
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*)$ index.php? [L,E=PATH_INFO:$1]
</IfModule>
如果存在iframe的话,可能需要先获取到iframe,然后在去获取url中的参数,例如:
<iframe src="xxxx/controller/action?param=value"></iframe>
<script>
var ifm = document.getElementById("myFrame");
var src = ifm.contentWindow.location.href;
var query = src.split("?")[1];
var params = query.split("&");
for (var i = 0; i < params.length; i++) {
var p = params[i].split("=");
console.log(p[0] + "=" + p[1]);
}
</script>
可以通过在链接中添加referer参数解决。referer参数指定了当前页面的来源页面,这样框架页面就可以从referer参数中获取到父页面的url,然后从url中解析出share参数。
根据您的描述,问题可能出现在跨域访问导致无法获取share参数。在跨域场景下,浏览器会遵循同源策略,限制从一个源(域名、协议和端口)向另一个源发送请求。这会导致通过iframe从一个域名(例如8.p)加载的内容无法访问另一个域名(例如9.p)的参数。
为了解决这个问题,可以考虑以下方法:
Access-Control-Allow-Origin: *
,允许来自任何域的请求访问资源。请注意,使用通配符*
可能存在安全风险,您也可以将其设置为特定的域名。<iframe id="inlineFrameExample"
title="Inline Frame Example"
width="300"
height="200"
src="9.p/index/index/index?share=ai01">
</iframe>
这样,在9.p页面中可以通过获取URL中的查询参数来获取share的值。
请根据您的具体需求选择适合的解决方案,并根据您的开发环境和框架进行相应的配置和调整。