来自URL的iframe源

3
我们网站上有一个加载一个联盟商店的iFrame页面。我们想通过电子邮件发送链接,使页面在我们网站上加载,同时显示iFrame中产品的详细信息。下面的代码是正常工作的,但是如果用户直接访问我们网站上的页面(而不使用URL定义的页面元素链接),它就会崩溃。
不确定是否相关,但是iframe源位于完全不同的域上,并且我无法控制它。
这个工作: http://www.mysite.html/thispage.aspx?id=16500&page=http://myiframesource.com/detail/0307959473 这个不行: http://www.mysite.html/thispage.aspx?id=16500 (iframe src 在加载时更改为“undefined”)
这是我目前拥有的:
<script language="javascript">
    window.onload = updateiframe; //event handler (calls the function)

    function updateiframe() {
        function getUrlVars() {
            var vars = [], hash;
            var hashes = window.location.href.slice(window.location.href.indexOf('?') + 1).split('&');

            for(var i = 0; i < hashes.length; i++) {
                hash = hashes[i].split('=');
                vars.push(hash[0]);
                vars[hash[0]] = hash[1];
            }

            return vars;
        }

        var hash = getUrlVars();
        var myiframepage = decodeURIComponent(hash['page']);
        document.getElementById('myiframe').src = myiframepage;
    }
</script>

<iframe id="myiframe" name="myiframe" src="myiframesource.com" width="555" height="2000" border="0" style="border: 0px solid #ffffff;"></iframe>

感谢您提前的帮助!


需要翻译的内容涉及IT技术,此处无需翻译。

请让您的用户仅通过电子邮件中的链接访问该页面!因为正是从该URL获取了iframesrc!如果iframe的src对于每个用户都不会改变,那么只需直接在iframesrc中键入链接即可! - user2587132
1个回答

1
无法工作的URL缺少“page”参数。
您的JavaScript从URL中获取所有参数并将它们放入一个数组中。接下来,它尝试在该数组中查找“page”参数:
var myiframepage = decodeURIComponent(hash['page']);

很明显缺少某些内容,这就是你的iframe源代码显示“undefined”的原因。你可以在javascript中添加一小段代码来检查正确的“id”参数,如果是16500并且缺少“page”参数,可以进行javascript重定向。
var hash = getUrlVars();
var myiframepage = decodeURIComponent(hash['page']);
if(typeof(myiframepage) == 'undefined') {
    var id = decodeURIComponent(hash['id']);
    if(typeof(id) != 'undefined' && id == '16500') {
        window.location.replace('http://www.mysite.html/SiteText.aspx?id=16500&page=http://myiframesource.com/detail/0307959473');
    }
}
else {
    document.getElementById('myiframe').src = myiframepage;
}

这段代码应该能够处理那些没有从你的电子邮件中获取链接而直接浏览页面的人...
同时要注意传递类似这样的数据。人们很容易劫持你的 iframe 并在其中显示恶意网站,只需提供不同页面参数的 URL!

非常感谢!这个方法对我很有效,但是基于你提到的劫持问题,我决定采用不同的方式,只定义iframe URL的基础部分,并在链接中传递数字参数。这也解决了未定义页面参数和iframe源更改为未定义的问题。再次感谢! - lmg

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接