Here is my sample code - I am thinking about contributing a module for this function
// get the header code and write it to a file function module_name_global_header_write() {//dpm('raw_html');, with some admin settings
// get the header code and write it to a file
function module_name_global_header_write() {//dpm('raw_html');
// there may be an issue if we are processing this function while viewing the same url as $sourceDomain
// perhaps we will need to create a page or URL that is not viewed but can supply the HTML for the header
$sourceDomain = 'http://site_name.com';
$sourceMenuId = 'superfish-1';
// initialize simplehtmldom objects
$html = new simple_html_dom();
$responsive_desktop_css = new simple_html_dom();
$global_styles_css = new simple_html_dom();
// load files into simplehtmldom
$html->load_file($sourceDomain); // the generated HTML
$global_styles_css->load_file($sourceDomain . '/sites/all/themes/adaptivetheme/site_namedaptive/css/global.styles.css');
$responsive_desktop_css->load_file($sourceDomain . '/sites/all/themes/adaptivetheme/site_namedaptive/css/responsive.desktop.css');
// #header-wrapper and #nav-wrapper are the ids of the header and menu
$topbar = $html->find('#header-wrapper', 0); // the zero here is necessary because simplehtmldom returns a collection
$navbar = $html->find('#nav-wrapper', 0);
// prepare Cross Origin Resource Sharing header
$header = "<!-- This header necessary using CORS http://www.nczonline.net/blog/2010/05/25/cross-domain-ajax-with-cross-origin-resource-sharing/ -->
<?php
header('Access-Control-Allow-Origin: *');
?>";
// some more CSS rules that are not in the css files
$morestyles = '#google-appliance-block-form{width:100%;height:30px;text-align:right}#block-google-appliance-ga-block-search-form .container-inline div{display: inline;}.element-invisible, #block-google-appliance-ga-block-search-form label, .url-textfield{display:none!important;}#nav-wrapper ul li a, #menu-bar ul li a {padding: 5px 8px;}#nav-wrapper ul li.last, #menu-bar ul li.last {
border-right: none;}';
// prepare the CSS style tag; in case we do not want css, we only have to unset the $global_styles_css var
$cssStyles = $global_styles_css ? '<style>' . $global_styles_css . $responsive_desktop_css . $morestyles . '</style>' : '';
// replace relative image urls with absolute
$cssStyles = str_ireplace("../",$sourceDomain . "/sites/all/themes/adaptivetheme/site_namedaptive/",$cssStyles);
// assemble output from components
$output = $header . $topbar . $navbar . $cssStyles;
// create directory if not exists
if (!file_exists('public://global_header')) {
mkdir('public://global_header', 0777, true);
}
//write the file that will be fetched by the script tag embedded in the target site
$filename = "public://global_header/raw_header.php";
file_put_contents($filename,$output);
}
here is the code in the js file:
//cross-browser see http://www.nczonline.net/blog/2010/05/25/cross-domain-ajax-with-cross-origin-resource-sharing/
function createCORSRequest(method, url){
var xhr = new XMLHttpRequest();
if ("withCredentials" in xhr){
xhr.open(method, url, true);
} else if (typeof XDomainRequest != "undefined"){ //IE
xhr = new XDomainRequest();
xhr.open(method, url);
} else {
xhr = null;
}
return xhr;
}
var sourceURL = 'http://site.com/';
var request = createCORSRequest("get", sourceURL + "/sites/default/files/global_header/raw_header.php");
if (request){
request.onload = function(){
// do stuff if request is successful; if it fails, there is no replacement of existing HTML in target site
// look first if a container with id #header-id exists, if not use the existing #topbar container
document.getElementById('header-id') ? document.getElementById('header-id').innerHTML = request.responseText : document.getElementById('topbar').innerHTML = request.responseText;
// change a relative image URL into absolute
document.getElementById('branding').getElementsByTagName('img')[0].src = sourceURL + '/sites/default/files/image.png';
// change relative Google Appliance Search action into absolute
document.getElementById('google-appliance-block-form').action = sourceURL + '/';
};
request.send();
}
example script tag:
<script src="http://site.com/sites/all/modules/custom/module_name/module_name.js"></script>