你能告诉我节点是什么.js相当于这段代码吗:
<?php
$url = $_GET['url'];
$html = file_get_contents($url);
echo $html;
?>
我希望能够这样做的原因是,我想在 iframe 中打开一个外部域页面,并能够在 iframe 内操作 DOM,而不会遇到相同的域策略。
谢谢!
@BrandomWamboldt是正确的,你根本无法访问其他域的DOM。
作为解决方法,您可以让自己的服务器下载该页面并操作 DOM。这样,您就可以通过网域上的网址投放网页。
这并不是说这是一个好主意,因为您允许其他站点注入您传递给用户的脚本。但这里有一个使用 jsdom 更改另一个站点页面并从您自己的域发送响应的示例:
var jsdom = require('jsdom');
function handler(req, res){
jsdom.env(
"http://stackoverflow.com/questions/19254525/php-echo-equivalent-in-node",
["http://code.jquery.com/jquery.js"],
function (errors, window) {
window.$('body').prepend(
window.$('<h1></h1>').text('Text inserted by Node')
);
var doc = window.document;
var output = doc.doctype.toString()+doc.innerHTML;
res.setHeader('Content-Type', 'text/html');
res.writeHead(200);
res.end(output);
}
);
};
require('http').createServer(handler).listen(3000);
如果您不关心服务器端的 DOM,您可以简单地下载带有http.request
或request
库的整个远程页面,然后将页面内容作为来自您的域的响应发送。
同样,从安全的角度来看,这很糟糕,因此您可能应该寻找替代解决方案
部分等价物是
function h(req, res){
var query = require('url').parse(req.url,true).query;
var data = require('url').parse(query.url);
require('http').request({
host: url.host,
path: url.pathname
}, function(response){
response.on('data', function (chunk) {res.write(chunk);});
response.on('end', function () { res.end(); });
})
}
require('http').createServer(h).listen(80);
res.write 此处将数据发送到浏览器当然,您可以将所有内容存储在某个变量中并将其放入您自己的模板中
更新:使用获取参数url
添加