IFrame 中的 HREF 链接以更改 href 值
Posted
技术标签:
【中文标题】IFrame 中的 HREF 链接以更改 href 值【英文标题】:a HREF link in an IFrame to change href value 【发布时间】:2014-03-24 11:45:30 【问题描述】:是否可以在 iframe 中更改或附加超链接?
这是我的代码:
<script src="//ajax.googleapis.com/ajax/libs/jquery/1.11.0/jquery.min.js"></script>
<script type="text/javascript">
function changelinks(iframe)
var as = iframe.contentDocument.getElementsByTagName('a');
for(i=0;i<as.length;i++)
as[i].setAttribute('href',"http://www.yahoo.com");
</script>
</head>
<body>
<iframe src="http://www.google.com" onload="changelinks(this)"></iframe>
我的目标是当点击 iframe 下的任何链接时,目标网址将是 www.yahoo.com。
欢迎提出任何建议。 更新我在 iframe 中获取网站,而不是位于我的服务器中。
【问题讨论】:
这是因为 iframe 中的所有链接都链接到 yahoo.com 吗?如果是这样,请参阅here。 你不需要setAttribute
,你不能只做as[i].href = 'http://www.yahoo.com'
吗?
@Wilf 我没有发出父窗口或新窗口。
@TheWobbuffet "你不能像[i].href = 'yahoo.com'吗?" 哈哈哈谢谢
这真的有效吗? :P
【参考方案1】:
因为你使用的是 jquery。
function changelinks(iframe)
var frame = $( iframe ).get(0).contentDocument;
$( 'a', frame ).click(function( event )
event.preventDefault();
location.href = 'http://yahoo.com';
);
或者改变元素属性:
function changelinks(iframe)
var frame = $( iframe ).get(0).contentDocument;
$( 'a', frame ).each(function()
$(this).attr('href', 'http://yahoo.com');
);
【讨论】:
谢谢建议,还是不行。注意:我在不在我的服务器上的 iframe 中获取网站。【参考方案2】:如果 iframe url 是外部 url,您会遇到注入安全问题...
看到这个:https://developer.mozilla.org/en-US/docs/HTTP/Access_control_CORS 这意味着您只能访问您的域站点上的 DOM。 你可以做一些 php "proxy" hacks,在那里你可以更改 href attr 但使用简单的 javascirpt 它不起作用。
(顺便说一句:有一些油脂猴方法,但我认为这不是您网站的选择:))
问候 托马斯
【讨论】:
如果您通过 php proxy hack 显示示例代码,我将不胜感激。 您可以通过 file_get_contents() 获取站点 html(使用 uri)。现在您需要像这样调用替换 href 值: $pageHTML = preg_replace('#href=\"(.*)\"#isU', "href=\"" . $url . "\"", $pageHTML ); (未测试)以上是关于IFrame 中的 HREF 链接以更改 href 值的主要内容,如果未能解决你的问题,请参考以下文章
Phonegap / Cordova ios外部链接iframe无法在safari中打开
Layuilayui中iframe子页面中的链接点击后在父页面中动态添加tab选项