<html>
<head>
<script type="text/javascript">
function open_urls() {
var url1="https://finance.yahoo.com/";
var newpage=window.open(url1);
alert(newpage.document.body.innerText.split(' ').length);
}
</script>
</head>
<body onload="javascript: open_urls()"></body>
</html>
上面的代码不起作用,如何访问不同URL的DOM? 我想打开一个网址并显示该网址的字数。
答案 0 :(得分:1)
您无法打开另一个窗口和页面,并希望能够访问它。 Web遵循许多安全策略来阻止此类操作,例如Frequently Asked Questions (FAQ) for Visual Studio 2017 RC。长话短说,您无法访问不属于同源的网址,而不是您要拨打的网页。因此,您无法在您的示例中访问雅虎财务(最有可能)。
如果您使用同一来源进行通话,则可以使用Same-Origin policy之类的API来获取文字并在那里进行单词计数,或者您甚至可以加载iframe并查询:{{1} }。
因此,知道您无法通过浏览器执行此操作,可以从NodeJS应用程序执行此操作(也许还使用fetch):
myIframe.contentWindow.document.body.innerHTML
我知道您希望从浏览器中执行此操作,但遗憾的是,您无法对无法控制的原点执行此操作。
答案 1 :(得分:-1)
你可以尝试一下。 在你index.html(假设)写这个:
<html>
<head>
<title>Index Page</title>
</head>
<script type="text/javascript">
function poponload()
{
testwindow = window.open("new_window.html", "mywindow","location=1,status=1,scrollbars=1,width=600,height=600");
}// here new_window.html is file you want to open or you can write any url there
</script>
<body onload="javascript: poponload()">
<h1>Hello this can Work</h1>
</body>
</html>
假设你的new_window.html是这样的:
<html>
<head>
<script>
function get_text(el) {
ret = "";
var length = el.childNodes.length;
for(var i = 0; i < length; i++) {
var node = el.childNodes[i];
if(node.nodeType != 8) {
ret += node.nodeType != 1 ? node.nodeValue : get_text(node);
}
}
return ret;
}
function run_this(){
var words = get_text(document.getElementById('content'));
var count = words.split(' ').length;
alert(count);
}
</script>
</head>
<body onload='javascript: run_this()' id="content">
<h1>This is the new window</h1>
</body>
</html>