Interesse ist nicht das Problem ;). Eigentlich auch nicht mein Englisch, auch wenn ich natürlich Deutsch bevorzuge. Aber Zeit... man muss ja von irgendetwas seine Rechnungen bezahlen :cry:
So schnell kanns gehen...
Sören, du hattest recht, das geht leichter als ich dachte.
OK, meine Erweiterung ist nur für einen sehr kleinen Personenkreis nützlich und rein rechtlich darf ich die ohnehin nie verbreiten weil Wetter.com wohl ein Problem damit hätte wie ich das umgesetzt habe, aber es funktioniert. Das Ding zeigt auf Klick das Wetter von wetter.com für mein kleines Heimatstädtchen im Popup an.
Aber vielleicht kann mir ja jemand helfen: Mein AddOn funktioniert nur, weil ich
extension.webextensions.default-content-security-policy
geleert habe. Das ist natürlich keine Lösung, aber ansonsten gab es permanent den Fehler das Scripte nicht auf _self zugreifen dürfen.
die manifest.json:
{
"manifest_version": 2,
"name": "Wetter.com",
"short_name": "Wetter.com",
"description": "Wetter.com fuer *Heimatstadt*",
"author": "test",
"version": "1.0",
"minimum_chrome_version": "60",
"icons": {
"32": "skin/logo32.png"
},
"browser_action": {
"default_title": "Wetter *Heimatstadt*",
"default_icon": "skin/logo32.png",
"default_popup": "content/popup.html"
},
"web_accessible_resources": [
"/skin/*"
],
"content_scripts": [
{
"matches": [ "<all_urls>" ],
"all_frames" : true,
"js": ["/content/w.js"]
},
{
"js": [ "/content/w.js" ],
"matches": [ "<all_urls>" ],
"run_at": "document_start"
},
{
"matches": [ "<all_urls>" ],
"all_frames" : true,
"js": ["/content/w.js"]
}
],
"permissions": [
"activeTab",
"tabs",
"storage",
"webRequest",
"webRequestBlocking",
"http://*/*",
"https://*/*",
"<all_urls>"
]
}
Alles anzeigen
die popup.html:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html>
<head>
<title>Wetter.com Widget</title>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<script type="text/javascript" src="/content/w.js" charset="utf-8"></script>
<style>
html {height: 251px;}
body {height: 251px; width: auto; overflow: hidden; background-color: silver;}
.wcom-default a,.wcom-default div,.wcom-default img {border:0;margin:0;padding:0;float:none;clear:none;outline:0;font:inherit;font-size:100%;vertical-align:baseline;width:auto;height:auto;position:static;display:inline;line-height:normal;text-decoration:none}
.wcom-default div{display:block}
.wcom-default{font-family:Verdana, Geneva, sans-serif;overflow:hidden;position:relative;box-sizing:content-box !important}
.wcom-city{max-height:28px !important;overflow:hidden}
.wcom-city,.wcom-city a{font-size:15px;text-align:center;margin-bottom:5px;text-decoration:none}
.wcom-city a:hover{text-decoration:none}
.w300x250{font-size:11px; padding:10px !important; width:280px !important; height:230px !important}
.w300x250 .wcom-city{max-height:18px !important;overflow:hidden}
#wcom-1-wetter {padding: 0px !important; margin: 0px !important}
</style>
</head>
<body>
<div id="wcom-1" class="wcom-default w300x250" style="border: 0px; background-color: silver; border-radius: 5px">
<div id="wcom-1-wetter"></div>
<script>_wcomWidget({id: 'wcom-1',location: '*Heimatstatd',format: '300x250',type: 'summary'});</script>
</div>
</body>
</html>
Alles anzeigen
und die w.js:
// die Scripte sind alle von Wetter.com vorgegeben, bis auf clean()!
var _wcomDefault={id:"wcom-1",location:"DE0001020",format:"300x250",type:"summary"};
function _wcomOps(){
for(var key,obj={},al=arguments.length,i=0;al>i;i++)for(key in arguments[i])arguments[i].hasOwnProperty(key)&&(obj[key]=arguments[i][key]);return obj
}
function _corsRequest(method,url){
var xhr=new XMLHttpRequest;
return"withCredentials"in xhr?xhr.open(method,url,!0):"undefined"!=typeof XDomainRequest?(xhr=new XDomainRequest,xhr.open(method,url)):xhr=null,xhr
}
function _wcomRequest(settings){
var parent=(document.getElementById("wcom-1"));
var container=document.getElementById("wcom-1-wetter");
var url="https://www.wetter.com/apps_und_mehr/website/ajaxwidget/";
var response="";
var xhttp=_corsRequest("GET",url);
settings.before&&"function"==typeof settings.before&&(void 0!==container&&(container.innerHTML=""),settings.before()),null!==xhttp?(xhttp.setRequestHeader("X-Requested-With","XMLHttpRequest"),xhttp.setRequestHeader("X-Widget-Id",settings.id),xhttp.setRequestHeader("X-Widget-Location",settings.location),xhttp.setRequestHeader("X-Widget-Format",settings.format),xhttp.setRequestHeader("X-Widget-Type",settings.type),xhttp.onreadystatechange=function(){4==this.readyState&&200==this.status&&(response=this.responseText)},xhttp.onloadend=function(){void 0!==container&&(container.innerHTML=clean(response)),settings.complete&&"function"==typeof settings.complete&&settings.complete()},xhttp.send(null)):settings.complete&&"function"==typeof settings.complete&&settings.complete();
var link=parent.getElementsByTagName("a");
return link.length&&link[0].setAttribute("rel","nofollow"),response
}
function _wcomWidget(options){
var settings=_wcomOps(_wcomDefault,options);
_wcomRequest(settings)
}
// Werbung aus dem Antwort-String entfernen... daher nicht für Veröffentlichung bestimmt!
function clean(string) {
var n = string.indexOf('<div style="clear:');
var kurz = string.slice(0,n);
var neu = kurz + "</div> <div style='position: fixed; bottom: 1px; left: 1px;'>Wetter*Heimatstadt*</div>";
return neu.replace(/src="\/\//g, 'src="http://');
}
Alles anzeigen
Mehr Dateien sind es nicht. Da wo *Heimatstadt* steht, sind die entsprechenden Namen bzw die Wetter.com-ID hinterlegt, ich denke mal nicht, dass das irgendwer braucht ;).
Falls jemand die richtige Suchrichtung kennt in die er mich treten könnte, um das SCP-Problem zu lösen.. Danke