當我打開(例如)Chrome的開發人員工具時,我可以通過單擊它來檢查某個元素(該工具也突出顯示了這一點)。它向我展示了它的HTML標籤以及首要的類或ID。 是否有可能在我的網站上具有相同的功能,但不使用開發人員工具?檢查HTML元素沒有瀏覽器開發工具?
例子:
你挑一個網址,我的網站上顯示它的iframe中。我的目標是通過單擊它來獲取iframe中顯示的html元素的類/ id。
當我打開(例如)Chrome的開發人員工具時,我可以通過單擊它來檢查某個元素(該工具也突出顯示了這一點)。它向我展示了它的HTML標籤以及首要的類或ID。 是否有可能在我的網站上具有相同的功能,但不使用開發人員工具?檢查HTML元素沒有瀏覽器開發工具?
例子:
你挑一個網址,我的網站上顯示它的iframe中。我的目標是通過單擊它來獲取iframe中顯示的html元素的類/ id。
像這樣?
https://jsfiddle.net/tommy_o/8sx0d693/6/
<div id="myCoolDiv">
<p class="myCoolClass">This text will get replaced with the name of the div!</p>
</div>
<script type="text/javascript">
function showElementId(element) {
element.innerHTML = element.id;
}
showElementId(document.getElementById("myCoolDiv"));
</script>
是。您需要使用JavaScript。
事情是這樣的:
var h1s = document.getElementsByTagName("h1");
var ps = document.getElementsByTagName('p');
var imgs = document.getElementsByTagName('img');
var developerWindow = document.getElementById("developer-window");
function setUpListeners(tagCollection) {
for (var i=0;i<tagCollection.length;i++) {
tagCollection[i].addEventListener("pointerover", function() {
this.style.padding = "1rem";
this.style.backgroundColor = "yellow";
developerWindow.innerHTML = this + " id: " + this.id;
});
tagCollection[i].addEventListener("pointerleave", function() {
this.style.padding = "initial";
this.style.backgroundColor = "initial";
developerWindow.innerHTML = "";
});
}
}
setUpListeners(h1s);
setUpListeners(ps);
setUpListeners(imgs);
body {
margin-bottom: 20%;
}
#developer-window {
border: 2px solid black;
border-bottom: none;
background-color: white;
height: 20%;
position: fixed;
bottom: 0;
width:98vw;
display: flex;
justify-content: center;
align-items: center;
}
<h1 id="main-heading">My website</h1>
<p id="first-paragraph">My first paragraph</p>
<img id="featured-image" src="https://placehold.it/250x250">
<div id="developer-window"></div>
的OP請求版本的這個地方的外部網站通過iframe中加載,然後利用「開發窗口」在評論的功能下面我解釋了由於主機名稱不匹配(CORS安全問題),這是不可能的,但是如果在本地瀏覽器上禁用了這些設置,則可以這樣做。
function startDevTools() {
var iframe = document.getElementById("website-iframe");
var website = iframe.contentDocument;
console.log(website);
var h1s = website.getElementsByTagName("h1");
var ps = website.getElementsByTagName('p');
var imgs = website.getElementsByTagName('img');
var developerWindow = document.getElementById("developer-window");
function setUpListeners(tagCollection) {
for (var i=0;i<tagCollection.length;i++) {
tagCollection[i].addEventListener("pointerover", function() {
this.style.padding = "1rem";
this.style.backgroundColor = "yellow";
developerWindow.innerHTML = this + " id: " + this.id;
});
tagCollection[i].addEventListener("pointerleave", function() {
this.style.padding = "initial";
this.style.backgroundColor = "initial";
developerWindow.innerHTML = "";
});
}
}
setUpListeners(h1s);
setUpListeners(ps);
setUpListeners(imgs);
}
body {
background-color: #eee;
}
iframe {
border: 5px dashed #ccc;
width:90vw;
height: 100vh;
margin: 2rem;
margin-bottom:20%;
}
#developer-window {
border: 2px solid black;
border-bottom: none;
height: 20%;
position: fixed;
bottom: 0;
width:98vw;
display: flex;
justify-content: center;
align-items: center;
background-color: white;
}
<iframe id="website-iframe" src="http://nerdspecs.com" frameborder="0" onload="startDevTools()"></iframe>
<aside id="developer-window"></aside>
這幾乎是我正在尋找。功能是完美的,但是可以在我的div中顯示的其他網站上使用您的代碼嗎? Like: '
很抱歉,這是不可能的。原因是,我們無法在不使用相同主機名的網站上運行JavaScript。這是一項安全功能。現在,您可以使用我將原始代碼放在下面的更新後的代碼,但您需要在瀏覽器上禁用某些安全設置。請參閱此帖以獲取更多信息: https://stackoverflow.com/questions/25098021/securityerror-blocked-a-frame-with-origin-from-accessing-a-cross-origin-frame – scramlo
永遠不要疲倦於實現只有在禁用或修改安全設置時纔有效的代碼。 – tommyO
類似的東西,但是我正在尋找元素的ID不是我的領域,這是一個隨機的網站,我想在一個div/IFRAME /不管上顯示我的自己的網頁。認爲這是可能的? –
據我所知,如果他們不在同一個域[[見同源策略wiki]](https://en.wikipedia.org/wiki/Same- origin_policy)。還要看看這些類似的SO問題:[如何獲取JavaScript中的iframe的正文內容?](https://stackoverflow.com/questions/926916/how-to-get-the-bodys-content-of在JavaScript中的一個iframe)和[瞭解iframe中的跨域問題](https://stackoverflow.com/questions/14197653/understanding-cross-domain-issue-in-iframes) – tommyO