Ich erstelle eine benutzerdefinierte Power BI-Visualisierung, also habe ich Zugriff auf eine Javascript-Datei, die von der Plattform verbraucht wird. Ich habe keinen Zugriff auf Markup, nur ein Element, das injiziert wird, wo ich meine Visualisierung mounten soll.Rückruf wird nicht aufgerufen
ich eine Bing Karte zu montieren versuche, sehen die Dokumente wie folgt aus:
<div id='myMap' style='width: 100vw; height: 100vh;'></div>
<script type='text/javascript'>
var map;
function loadMapScenario() {
map = new Microsoft.Maps.Map(document.getElementById('myMap'), {});
}
</script>
<script type='text/javascript' src='https://www.bing.com/api/maps/mapcontrol?key=YourBingMapsKey&callback=loadMapScenario' async defer></script>
Die URL für das Skript hat einen callback
Abfragezeichenfolgeflag param, die den Namen der Funktion enthält aufzurufen.
Da ich keinen Zugriff auf das Markup habe, versuche ich alles dynamisch im Konstruktor meiner Visualisierung zu machen. Ich erstelle eine Funktion, verschiebe sie in den globalen Bereich und füge dann querystring var hinzu, um sie zu referenzieren, aber sie wird nie aufgerufen. Kannst du etwas sehen, das ich vermisse?
constructor(options: VisualConstructorOptions) {
this.host = options.host;
this.elem = options.element;
const self = this;
function moveMethodsIntoGlobalScope(functionName){
var parts = functionName.toString().split('\n');
eval.call(window, parts.splice(1, parts.length - 2).join(''));
}
function methodsToPutInGlobalScope(){
function loadMapScenario(){
console.log("finally called loadMapScenario");
}
}
const script = document.createElement('script');
script.type = 'text/javascript';
script.async = true;
console.log(loadMapScenario === undefined); // false, definitely in global scope
script.src = 'https://www.bing.com/api/maps/mapcontrol?key=xxxxxxxxxx&callback=loadMapScenario';
document.getElementsByTagName('head')[0].appendChild(script);