Ich versuche, eine Tab-URL zu schreiben, die ich von einer Chrome-Erweiterung der Firebase-Datenbank erhalte. Allerdings wirft FB einen Fehler, nämlich:Datatype von tabs.url in Chrome Erweiterung mit Firebase wirft Fehler
extensions::uncaught_exception_handler:8 Error in response to tabs.query: Error: Firebase.update failed: First argument contains an invalid key ([object MouseEvent]) in path /user-posts/[object MouseEvent]/-KM8uJZHiNsgtQbNh13I. Keys must be non-empty strings and can't contain ".", "#", "$", "/", "[", or "]"
Der entsprechende Code in meinem popup.js:
function writeNewPost(uid) {
chrome.tabs.query({currentWindow: true, active: true}, function (tabs) {
var urlvar = tabs[0].url;
var postData = {
uid: uid,
url: urlvar
};
var newPostKey = firebase.database().ref().child('posts').push().key;
var updates = {};
updates['/posts/' + newPostKey] = postData;
updates['/user-posts/' + uid + '/' + newPostKey] = postData;
return firebase.database().ref().update(updates);
});
};
So ist es zu beklagen, weil die URL verbotene Zeichen enthält? Es muss irgendwie möglich sein, es zu konvertieren, um es dann in die Datenbank zu schreiben.
document.addEventListener("DOMContentLoaded", function() {
document.getElementById('clickme').addEventListener('click', writeNewPost);
});
Die uid stammt aus den background.js, wo der Login behandelt wird:
Die Funktion durch diese wird aufgerufen.
var uid = firebase.auth().currentUser.uid;
Und es gibt etwas zurück. Was mich beunruhigt ist, dass die gleiche Zeile in meinem popup.js Null zurückgibt.
Ich sehe. Sie schlagen also eine Alternative zum Mausklick vor? Ich habe Probleme, einen anderen Weg zu finden, dies anzurufen. Der Code wurde oben aktualisiert. – ffritz
Woher kommt die 'uid'? Das Problem ist, dass es als Argument der Funktion definiert ist. Es ist in Ordnung, die Funktion als Handler (oder von einem Handler) zu bezeichnen, aber "uid" muss von _irgendwo_ kommen. – Xan
Es kommt von der background.js, aber ich habe gerade festgestellt, dass es Null in der popup.js (wo die WriteNewpost-Funktion befindet) ist. – ffritz