動かしているコードの中の最小限の部分を抜き出したものを下に示します。
お見せしてるコードでは Style や Javascript は html ファイルの中に埋め込まれていますが、実際には別ファイルにして読み込ませています。
<!DOCTYPE HTML>
<html lang="ja">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=2">
<title>Test Case</title>
<style><!--
.msgbox{border:outset 2px white; background-color:gainsboro; color:#003399;
position:fixed; top:50%; left:5%; width:345px; height:180px;
font-family:"Lucida Console", monospace; font-size:13px;}
.cross{border:outset 2px white;
width:15px; padding-left:5px; float:right; cursor:pointer;}
.innerText{width:100%; padding-top:4px; padding-left:10px; text-align:left; line-height:1.2;}
--></style>
</head>
<body>
<IMG src="AAA.jpg" id="pic2" style="float:left;margin:4px;" alt=""><br><br>
<a href="javascript:show_exif(2)">Exif</a>,
<a href="javascript:show_map(2)">Map</a>
<div id="msgzone" class="msgbox" style="display:none;">
<div class="cross" onclick="document.getElementById('msgzone').style.display='none';">X</div>
<div class="innerText" id="altmsg"></div></div>
<script><!--
// s-exif.js to show picture's EXIF and map Ⓒ copyright T. Fujiwara 3/30/2017
// Save in UTF-8 format.
// mod: 7/20/2018 Change to Embed API (or URL API)
// mod: 9/23/2018 change for iPhone: outputs warning "Enable PopUp"
// mod: 3/26/2019 enable iframe for Edge
// mod: 5/4/2019 replace "alert" box with smarter msg box
// mod: 12/22/2019 extended II search area in response to mineo's compression
// mod: 3/7/2022 display map in current tab. no API key required.
var reqtype, url, tiff, TT, ET, GT, nWin, en, ww, hh, gmaps, gkey, ddu, mmu, ssu;
var EDeg, NDeg, adr, str2, i, IEoffset, version, req, copyright, model, shutter, iso, bias;
var focullength, lensmodel, uu, dd, fnumber, uadr;
var imd=Array(); // image data in array format
//----------- entry of showEXIF/showMap -----------------
function show_exif(i) { reqtype="showexif"; loadXMLDoc(i,reqtype); }
function show_map(i) { reqtype="showmap"; loadXMLDoc(i,reqtype); }
//----------- small common subroutines ------------------
function longint(p){ //make long integer number from 4 bytes at p
if (en=="I") t1=imd[p+3]*16777216+imd[p+2]*65536+imd[p+1]*256+imd[p];
else t1=imd[p]*16777216+imd[p+1]*65536+imd[p+2]*256+imd[p+3];
return t1;}
function shortint(p){if (en=="I") t2=imd[p+1]*256+imd[p]; else t2=imd[p]*256+imd[p+1]; return t2;}
function getstr(p){ //make ascii string from [address p+8]
str=""; start=longint(p+8)+tiff; end=start+longint(p+4);
for (i=start; i<end; i++) {if (imd[i]!=0x00) str+=String.fromCharCode(imd[i]);}
return str;}
function gettagadr(tag,p){ //search for Tag in Tiff, Exif, or Geo tables, then return Tag address
t3="";start=p+2;end=start+12*shortint(p);
for (i=start;i<end;i=i+12) {if (shortint(i)==tag) {t3=i; break;}}
return t3;}
//----------- main routine, with AJAX -------------------
function loadXMLDoc(i,reqtype){
ua=navigator.userAgent; IEoffset=ua.indexOf("MSIE ");
if (IEoffset>=0) version=parseFloat(ua.substring(IEoffset+5,ua.indexOf(";",IEoffset)));
if (IEoffset>=0 && version<10.0) alert("Your browser does not support this function. Please use Firefox.");
else{
url= document.getElementById("pic"+i).src;
try {req=new XMLHttpRequest();} //as for IE, ver 7 and later only
catch(e){req=null; alert("Your browser does not support this function.");}
if(req){
req.open("GET",url,true);
req.responseType="arraybuffer"; //this works on IE10 and later
req.onload=function(oEvent) { //run when data become available, let it stand-by
var arrayBuffer=req.response;
if (arrayBuffer){
imd=new Uint8Array(arrayBuffer); //imd (image data) is a byte array, element is a number
en="";i=2;
for (j=1;j<4;j++){ // max test segments=3
if (shortint(i)==0xFFE1){ // look for exif APP segment
tiff=i+10;
if (shortint(tiff)==0x4949) en="I"; // Intel endianness
else if (shortint(tiff)==0x4D4D) en="M"; // Motorola endianness
break;
}
else i=i+2+shortint(i+2); // next APP segment (skip 0xFFED added by mineo)
}
if (en=="") alert("Sorry, the image data is not compatible with this utility. "+i);
else{
TT=tiff+8; //set TT (Tiff Table) entry address
if (reqtype == "showexif") displayEXIF();
else displayMap();
}
} //end arrayBuffer
}; //end oEvent
req.send(null); //go request the image data
} //end req e.g. >=IE7 or valid browsers
} //end >=IE10
}
//----------- display EXIF -----------------------------
function displayEXIF(){
//tag=0x8769 subIFD, ExifIFDPointer
ET=""; adr=gettagadr(0x8769,TT);
if (adr) ET=longint(adr+8)+tiff; //set ET (Exif Table) entry
//tag=0x0110 Model in TIFF, ascii string, any length
model=""; adr=gettagadr(0x0110,TT);
if (adr) model=getstr(adr);
//tag=0x829A ExposureTime in EXIF, unsigned rational, 8 bytes
shutter=""; adr=gettagadr(0x829A,ET);
if (adr){
uadr=longint(adr+8)+tiff; uu=longint(uadr); dd=longint(uadr+4);
if (uu%10==0 && dd%10==0){uu=uu/10;dd=dd/10;}
shutter=uu+"/"+dd;
}
//tag=0x829D FNumber, unsigned rational, 8 bytes
fnumber=""; adr=gettagadr(0x829D,ET);
if (adr){
uadr=longint(adr+8)+tiff; uu=longint(uadr); dd=longint(uadr+4);
fnumber=uu/dd+"";
}
//tag=0x8827 ISO, unsigned short, 2 bytes
iso=""; adr=gettagadr(0x8827,ET);
if (adr) iso=shortint(adr+8)+"";
//tag=0x9204 ExposureBias, signed rational, 8 bytes
bias=""; adr=gettagadr(0x9204,ET);
if (adr){
uadr=longint(adr+8)+tiff; uu=longint(uadr); dd=longint(uadr+4);
if (uu>=0x80000000) uu=uu-0xffffffff-1;
bias=uu/dd; if (bias>0) bias="+"+bias; bias=(bias+"").substr(0,5);
}
//tag=0x920A FocalLength, unsigned rational, 8 bytes
focallength=""; adr=gettagadr(0x920A,ET);
if (adr){
uadr=longint(adr+8)+tiff; uu=longint(uadr); dd=longint(uadr+4);
focallength=uu/dd+"";
}
//tag=0xA434 LensModel, ascii string, as many bytes
lensmodel=""; adr=gettagadr(0xA434,ET);
if (adr) lensmodel=getstr(adr);
if (lensmodel.length>25){
blankl=lensmodel.indexOf(" ",20);
if (blankl>=20){
lensmodel=lensmodel.substr(0,blankl)+"<br> "+lensmodel.substr(blankl+1);
}
}
//tag=0x8298 Copyright in TIFF, ascii string, as many bytes
copyright=""; adr=gettagadr(0x8298,TT);
if (adr) copyright=getstr(adr);
str1="<pre>Model: "+model+"<br>";
str1+="Exposure Time: "+shutter+" (sec)<br>";
str1+="F Number: "+fnumber+"<br>";
str1+="ISO Speed Rating:"+iso+"<br>";
str1+="Exposure Bias: "+bias+"<br>";
str1+="Focal Length: "+focallength+" (mm)<br>";
if (lensmodel) str1+="Lens Model: "+lensmodel+"<br>";
if (copyright) str1+="Ⓒ "+copyright+"<br>; //Ⓒ = U+24B8
str1+="</pre>";
document.getElementById("altmsg").innerHTML=str1;
document.getElementById("msgzone").style.display='block';
}
//------------- display map ------------------------------
function displayMap(){
//Tag 0x8825 Geo tag location
GT=""; adr=gettagadr(0x8825,TT);
if (adr) GT=longint(adr+8)+tiff; //set GT (Geo Table) entry
//tag=0x0001 GPSLatitudeRef
latref="";
if (GT){
adr=gettagadr(0x0001,GT);
if (adr) latref=String.fromCharCode(imd[adr+8]);
}
if(latref=="N" || latref=="S"){
//tag=0x0002 GPSLatitude
NDeg=0; adr=gettagadr(0x0002,GT);
if (adr){
p=longint(adr+8)+tiff;
ddu=longint(p); ddd=longint(p+4);
mmu=longint(p+8); mmd=longint(p+12);
ssu=longint(p+16); ssd=longint(p+20);
NDeg=(ssu/ssd/60+mmu/mmd)/60+ddu/ddd;
if (latref=="S") NDeg=-NDeg;
}
//tag=0x0003 GPSLongitudeRef
lonref=""; adr=gettagadr(0x0003,GT);
if (adr) lonref=String.fromCharCode(imd[adr+8]);
//tag=0x0004 GPSLongitude
EDeg=0; adr=gettagadr(0x0004,GT);
if (adr){
p=longint(adr+8)+tiff;
ddu=longint(p); ddd=longint(p+4);
mmu=longint(p+8); mmd=longint(p+12);
ssu=longint(p+16); ssd=longint(p+20);
EDeg=(ssu/ssd/60+mmu/mmd)/60+ddu/ddd;
if (lonref=="W") EDeg=-EDeg;
}
location.href="https://www.google.com/maps/place/"+NDeg+"+"+EDeg+"/"+"@"+NDeg+","+EDeg+",12z";
} // end {if latref}
else alert("Sorry, no map data is available for this picture.");
}
--></script>
</body>
</html>