我正在<iframe>我的HTML页面中加载一个并尝试使用Javascript访问其中的元素,但是当我尝试执行我的代码时,我收到以下错误:
SecurityError: Blocked a frame with origin "http://www.<domain>.com" from accessing a cross-origin frame.
Run Code Online (Sandbox Code Playgroud)
你能帮我找一个解决方案,以便我可以访问框架中的元素吗?
我正在使用此代码进行测试,但徒劳无功:
$(document).ready(function() {
var iframeWindow = document.getElementById("my-iframe-id").contentWindow;
iframeWindow.addEventListener("load", function() {
var doc = iframe.contentDocument || iframe.contentWindow.document;
var target = doc.getElementById("my-target-id");
target.innerHTML = "Found it!";
});
});
Run Code Online (Sandbox Code Playgroud) 我知道document.write被认为是不好的做法; 我希望编制一份提交给第三方供应商的理由清单,说明为什么他们不应该document.write在分析代码的实现中使用它们.
请在下面提供您声称document.write为不良做法的理由.
有没有一种从iframe获取当前URL的简单方法?
观众将经历多个站点.我猜我会在javascript中使用一些东西.
" 检测iframe是否为跨域 "的" 万无一失的方法 "的答案描述了一种方法,用于测试页面上的iframe是指向同域还是跨域页面,解决不同浏览器对跨域策略的解释和避免会中断用户或停止javascript的错误消息.
我正在寻找相当于这个但是从 iframe内部的子页面测试它是否在跨域iframe 内部.
可以通过全局访问(相同域)有关父级的信息,但有没有可靠的方法来执行此跨浏览器,而不会在检测到父级是跨域时崩溃到错误?parentparent.document.location
对于方便的测试,这里是一个jsfiddle中的jsbin,在尝试测试是否parent.location.host可访问时崩溃成错误.是否有一种可靠的方法来获取可用的东西,比如false告诉我们这是一个跨域的父级,而不是错误?
是否有一个try...catch变体,它将是强大的跨浏览器?或者可能是一些使用返回值的巧妙技巧parent.postMessage()?(虽然父页面无法编辑)
使用案例:想象嵌入在自己网站上的页面上的可嵌入内容,以及第三方.如果页面位于同域iframe上,我们会隐藏品牌并链接回原始网站,因为用户已在此处.如果他们从第三方iframe访问该页面或直接加载页面,我们会显示品牌和信用,以便他们可以看到内容的来源.
为了澄清,我知道相同的域策略,我不关心跨浏览器域是什么,我只是想写一个简单但可靠的if条件,如if( crossDomainParent() ){ /* do something */}
我正在开发一个 Chrome 扩展程序以与我自己的 Web 应用程序一起使用,处理加载到iFrame我的应用程序主页上的网页(包括跨域页面)。所以我必须发送消息,包含要处理的页面的 URL,从我的主页面到内容脚本,注入目标iFrame以访问已处理页面的窗口。
我尝试实施这里描述的方法。以下是所有涉及的文件的基本部分:
index.html:
...
<head>
...
<script type="text/javascript" src="base.js"></script>
</head>
<body>
<div>
<input type="text" id="page_url"> <input type="button" id="get_page" value="Get page">
</div>
<iframe id="cross_domain_page" src=""></iframe>
</body>
Run Code Online (Sandbox Code Playgroud)
base.js:
(function() {
"use strict";
function pageProcessing() {
let urlButton = window.document.getElementById("get_page");
urlButton.addEventListener("click", () => {
let url = window.document.getElementById("page_url").value;
window.postMessage(
{
sender: "get_page_button1",
message: url
},
"*"
);
window.postMessage(
{
sender: "get_page_button2",
message: url
},
"*"
);
});
}
window.document.addEventListener('readystatechange', () => …Run Code Online (Sandbox Code Playgroud) javascript iframe postmessage google-chrome-extension content-script
当我搜索并使用faroo移动到其他网页时,我正在使用iframe加载faroo.com作为默认src帧.但仍然在iframe src中显示faroo.com我只想捕获已加载到iframe的页面的url
<!DOCTYPE html>
<html>
<head>
<script src="http://ajax.aspnetcdn.com/ajax/jQuery/jquery-1.11.1.min.js"></script>
<script type="text/javascript">
$(function(){
$('#frameid').load(function(){
var z=$('#frameid').attr('src');
console.log('hi '+z);
});
$('#clicked').on('click', function(){
$('#frameid').attr('src', 'http://www.faroo.com/');
});
});
</script>
</head>
<body>
<iframe width="100%" height="500px" id="frameid" src="" name="iframe_a" ></iframe>
<p><input type="button" value="click me!" id="clicked"></p>
</body>
</html>
Run Code Online (Sandbox Code Playgroud)
console.log中的o/p始终是faroo.com而不是当前已加载的网站
我正在编写一个JavaScript像素,将在发布商页面上使用AD广告素材.此广告将包含在发布商网站上的跨域iframe(有时是多个级别)中.所以发布商页面看起来像这样
主持人(出版商)网站
<html>
<iframe src="http://domain1.com" name="first_level_iframe">
<iframe src="http://domain2.com" name="second_level_iframe">
<!--The script I want to write will be hosted here-->
</iframe>
</iframe>
</html>
Run Code Online (Sandbox Code Playgroud)
如果广告客户想要了解他/她的AD所服务的所有页面,那么我们需要知道主机页面网址.
正如这里提到的,我们可以像这样使用document.referrer获取父页面url
var url = (window.location != window.parent.location) ? document.referrer: document.location;
Run Code Online (Sandbox Code Playgroud)
但它只适用于只有一级的域.我们无法达到最高级别,因为我们对"domain1.com"iframe没有任何控制权.这是人们试图长期解决的一个问题,而且已经有许多问题已经在SO上提出了完全相同的问题.但是因为这篇文章,我再次问它.它声称他们拥有可以检测顶级窗口URL的专利解决方案.以下是博客的摘录
救生员是AdSafe开发的一种技术:解决方案的关键是能够读取托管广告的顶部框架的地址(*).我们正在检测色情内容,因为应该出现在"干净的发布商"网站中的广告出现在色情网站的框架内.将HGTV视为一个说明性的,但不是这种"干净的出版商"的真实例子.
那么,有没有办法检测顶级窗口网址?
为什么document.write在Javascript中使用通常不被视为好习惯?我知道这不是最优雅或最好的方式,但它有任何真正的错误吗?好吗?在什么情况下会比它更好inner.HTML
据我所知,如果在加载后使用,它将重写文档.但是,innerHTML即使我正在尝试重写文档,我应该使用吗?如果是这样,为什么?
我知道有些人问我是否在发布之前查看了相关问题; 我做到了.但我没有找到任何令人满意的东西.