我有这个书签,它遵循this topic中提出的内容:
javascript: (function () {
var jsCode = document.createElement('script');
jsCode.setAttribute('src', 'http://path/to/external/file.js');
document.body.appendChild(jsCode);
}());
我的问题是,如何为服务器脚本提供一些参数(例如页面标题)? 服务器脚本如下(到目前为止只是一些PoC):
(function(message){
alert(message + " " + Math.random()*100);
})();
答案 0 :(得分:4)
要将参数传递给服务器端脚本,请扩展查询字符串:
jsCode.setAttribute('src', 'http://path/to/external/file.js?parameter=' + document.title);
如果您打算将参数传递给返回的脚本,请在脚本元素中添加onload
处理程序:
javascript:(function() {
var jsCode = document.createElement('script');
var parameter = document.title; //Define parameter
jsCode.onload = function() {
// If the function exists, use:
if(typeof special_func == "function") special_func(parameter);
};
jsCode.setAttribute('src', 'http://path/to/external/file.js');
document.body.appendChild(jsCode);
})();
响应脚本(file.js):
function special_func(param){
alert(param);
}
如果要将(多个)变量传递给响应脚本,请使用以下代码:
javascript:(function() {
var jsCode = document.createElement('script');
var params = ["test", document.title]; //Define parameter(s)
var thisObject = {}; // `this` inside the callback function will point to
// the object as defined here.
jsCode.onload = function() {
// If the function exists, call it:
if (typeof special_func == "function") {
special_func.apply(thisObject, params);
}
};
jsCode.setAttribute('src', 'http://path/to/external/file.js');
document.body.appendChild(jsCode);
})();
http://path/to/external/file.js
:
// Declare / Define special_func
var special_func = (function(){
var local_variable = "password";
var another_local_title = "Expected title";
//Return a function, which will be stored in the `special_func` variable
return function(string, title){ //Public function
if (title == another_local_title) return local_variable;
}
})();