你能告訴我什麼是Node.js的相當於該代碼的PHP代碼:
<?php
$url = $_GET['url'];
$html = file_get_contents($url);
echo $html;
?>
我希望能夠做到這一點的原因,是因爲我想在iframe中打開外部域名頁面,並且能夠在沒有遇到的情況下操作iframe中的DOM 相同的域名策略。
謝謝!
你能告訴我什麼是Node.js的相當於該代碼的PHP代碼:
<?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
庫,然後發送頁面內容作爲您域的響應。
,這再次是壞的從安全角度來看,所以你或許應該尋找替代解決方案
嗨,柏拉圖。感謝信息。還有一件事。我怎麼可以在客戶端放入iframe來自我的域名的網址。例如:
這聽起來比渲染修改過的DOM的一次性頁面更難。我會使用類似@vp_arth的方法將URL傳遞到路由,下載頁面,並用指向服務器的URL替換所有'a'標籤:'>'',然後投放修改過的頁面 – Plato
部分相當於是
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這裏將數據發送到瀏覽器 肯定,你可以存儲所有它在一些變量並把它放到自己的模板
UPD:添加使用get參數url
你的意思是'node.js'? – Dai
Node.js是服務器端,而不是客戶端。你爲什麼認爲這是可能的? –
@CharlesAddis他是什麼時候說這是客戶的努力?他只是想創建一個託管在與他的網站相同的域上的服務器端代理,並且該代理將讀取遠程網頁。完全可能在PHP中。他只是想知道如何在Node中做到這一點。 –