我試圖通過注入一個功能到通過瀏覽器擴展程序內容腳本的網頁:如何在注入頁面的函數表達式中使用變量?
function inject(code) {
var actualCode = '(' + code + ')();';
var script = document.createElement('script');
script.textContent = actualCode;
(document.head||document.documentElement).appendChild(script);
script.parentNode.removeChild(script);
}
var myObj = person; // myObj/person is passed in from elsewhere
var fn = function() {
alert(myObj.name);
};
inject(fn); // myObj undefined
我的問題是,因爲FN函數式,我不能myObj.personName通過。所以我的問題是,我如何構造一個包含變量的函數表達式?我要做某種字符串連接嗎?
我也試圖對象傳遞給函數,如下所示:
function inject(code, myObj) {
var actualCode = '(' + code + ')(' + myObj +');';
...
但這並沒有工作,造成了「未捕獲的SyntaxError:意外的標識符」錯誤。
相關:Insert code into the page context using a content script
_「因爲FN函數式,我不能在myObj.personName傳」 _ - 爲什麼不?你可以這樣做:'(function(param){...})(paramValue);'(所以你應該能夠修改你的代碼來實現類似的效果)。 – nnnnnn
這取決於範圍。如果'myObj'在與'inject'相同的範圍內聲明,它應該可以工作。 – bfavaretto
@nnnnnn我試着做那樣的事情。如果我做了'var fn =(function(p){...})(param);'它會執行函數而不是傳遞實際的函數表達式。我也試過做類似'function inject(func,myObj){var code ='('+ func +')('+ myObj +');'; ...}',但絕對沒有工作,哈哈,它扔_Uncaught SyntaxError:意外的標識符_ –