不确定这是否可能,但是......我可以从 one.html 弹出一个窗口(例如到 somesite.com/index.html)并将所有 HTML 保存在 one.html 的隐藏字段中吗?
谢谢!
不确定这是否可能,但是......我可以从 one.html 弹出一个窗口(例如到 somesite.com/index.html)并将所有 HTML 保存在 one.html 的隐藏字段中吗?
谢谢!
通过“弹出窗口”执行此操作将导致各种异常,因为浏览器具有针对跨域任何内容的规则。他们试图阻止诸如javascript之类的东西试图访问另一边的文档,有太多的黑客会去“哦,耶,另一个漏洞利用!”。
如果您正在寻找一种将 HTML 加载到页面元素中的方法,我建议您使用 AJAX。要使用浏览器的内置 ajax,可以使用 XMLHttpRequest 对象。其步骤是首先创建对象,然后告诉它您要获取什么以及如何获取,然后获取它,然后读取数据。
这是一个例子:
// Create the object
var xhr = new XMLHttpRequest();
// Open page
xhr.open( 'GET', '/index.html', true );
// Register your events
xhr.onsuccess = function() {
// awesome, it loaded!
destination.innerHTML = xhr.responseText;
};
xhr.onerror = function(e) {
// the page denied my request because: e
};
// send any data if you want, or just execute the request
xhr.send( myData || null );
目的地将是这样的:
// jQuery version:
var destination = $( 'textarea#content-holder' );
// Equivalent to:
var destination = (function(tag, id) {
var elms = document.getElementsByTagName(tag);
for ( i = 0; i < elms.length; i++ ) {
if ( elms[i].id === id ) return elms[i];
}
return undefined;
})('textarea', 'content-holder');
另一方面,一个很棒的支持 ajax 的库是 jQuery,你可以从http://jquery.com/获得它。我推荐 ajax 的主要原因是它为不同类型的 ajax 请求提供了一些不同的 hack 和补丁,它非常简洁,您可以通过它避免很多痛苦。
要加载您正在尝试的内容,您的代码将如下所示:
$( destination ).load( '/index.html', function() {
// do stuff after it's been loaded
);
jQuery 将让您做的另一件非常酷的事情是从“index.html”加载页面的特定部分,即通过标准查询。例如,假设您只想从具有类“load-me”的元素加载标记,您应该这样做:
$( destination ).load( '/index.html .load-me', function() {
// after load stuff
);
完全绕过跨域限制的一种方法是使用 cURL,但这需要一些 PHP。这是一个简单的例子:
在 /ajax.php 中写:
<?php
if ( ! $_POST['ajax'] ) die();
// this doesn't consider errors
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $_POST['url']);
curl_exec($ch);
curl_close($ch);
?>
在你的 javascript 中写:
var xhr = new XMLHttpRequest();
// Open the script
xhr.open( 'POST', '/ajax.php', true);
// Register your events
xhr.onsuccess = function() {
// awesome, it loaded!
destination.innerHTML = xhr.responseText;
};
xhr.onerror = function(e) {
// the page denied my request because: e
};
xhr.send( { 'ajax':'true', 'url':'http://somesite.com/index.html' } );
或者在 jQuery 中:
$( destination ).load( '/ajax.php', {ajax:true,url:'http://somesite.com/indexhtml'}, function() {
// awesome, it loaded!
} );
需要考虑的事项: - 使用 AJAX,您仍然无法发出跨域请求,有办法,但没有完美的办法。(使用 XMLHttpRequest,您必须自己查找和编写 hack
如果没有 jQuery,将很难解析加载的数据。例如,如果你想抓住一个特定的元素,我希望你有疯狂的 RegExp 技能。
不同的浏览器有不同的ajax实现。在 IE 中,构造函数是 ActiveXObject.Create('XMLHttpRequest')。注意:所有这些都是 jQuery 的一部分。
希望你把事情弄清楚!XD
如果弹出窗口在同一个域中,您可以在弹出窗口中编写以下代码:
opener.document.getElementById('hidden').value = "the value you want";