在运行时插入Javascript,无法访问变量
我使用javascript文件来存储图像和其他内容的列表。我想在运行时、页面加载期间和单击按钮后读取其中一个文件。我可以将javascript文件作为脚本加载,但无法立即访问其内容 这是我无法使用javascript加载本地文件的解决方案在运行时插入Javascript,无法访问变量,javascript,appendchild,Javascript,Appendchild,我使用javascript文件来存储图像和其他内容的列表。我想在运行时、页面加载期间和单击按钮后读取其中一个文件。我可以将javascript文件作为脚本加载,但无法立即访问其内容 这是我无法使用javascript加载本地文件的解决方案 <script> function Get_Slide_Show(Idx) { Raw_Album_Info = ''; alert('Before: ' + Raw_Album_Info); albumPath = 'photos/'
<script>
function Get_Slide_Show(Idx) {
Raw_Album_Info = '';
alert('Before: ' + Raw_Album_Info);
albumPath = 'photos/' + albumList[Idx];
var script = document.createElement('script');
script.src = albumPath + '/album_info.js';
// document.head.appendChild(script);
document.getElementsByTagName('head')[0].appendChild(script);
alert('After: ' + Raw_Album_Info);
}
function Load_Slide_Show(Idx) {
Get_Slide_Show(Idx);
Load_Album_Info();
}
function Init_Slide_Show() {
Load_Album_List("photos");
Load_Slide_Show(0);
showSlides();
}
</script>
我在开始时重置了原始相册信息,第一个警报确认了这一点。我希望第二个警报显示原始专辑信息的新值。没有
如果我拆下这条线
Album_Info = '';
然后,第二次运行Get_Slide_Show时,警报会显示上一次调用的值
所以我可以读取变量,但我不能立即访问它。我应该使用insertBefore,还是调用某种刷新?加载脚本元素是异步的,在将其附加到文档之后的某个时间。发布的代码正在尝试访问
Raw\u Album\u Info
在加载脚本之前
尝试将加载事件处理程序添加到脚本元素以在加载后运行代码-可以首次访问处理程序中的
Raw\u Album\u Info
值。加载脚本元素是在将其添加到文档后的某个时间异步进行的。发布的代码正在尝试访问
Raw\u Album\u Info
在加载脚本之前
尝试将加载事件处理程序添加到脚本元素以在加载后运行代码-可以首次访问处理程序中的
Raw\u Album\u Info
值。在文档加载完成之前,Raw\u Album\u Info是未定义的。您可以执行document.readystate调用或其他操作,但下面我使用函数updatetest(),该函数使用setTimeout不断调用自己,直到定义了原始相册信息
在相册_info.js中,使用倾斜的勾号(在~键下方)会有所帮助。在var声明中,勾号位于所需文本的前后。如果您使用tick,那么编写一个简短的脚本就很容易了,它将自动从原始文本文件创建.js文件。例如,如果原始文本文件是album_info.txt,则bash脚本如下所示:
echo -n "var x=\`" > album_info.js
cat album_info.txt >> album_info.js
echo "\`" >> album_info.js
您在问题撰写中的原始专辑信息变量中的破折号错误。也许这只是一个写入错误,但如果该错误实际上存在于您的album_info.js代码中,则会阻止realRaw_album_info变量获得结果。
用于测试的my album_info.js的内容(注意,使用勾号创建.js文件也会保留文本文件中的换行符,因此如果要使用数组,可以在代码中使用var.split('\n'):
出于演示目的,我在顶部创建了一个albumList数组,在底部创建了一个脚本,以便显示一个包含可变内容的弹出窗口。我注释掉了这些警报,因为这个演示不需要它们。我注释掉了Raw\u Album\u Info=',因为它最初需要未定义,以便updatetest()正常工作
test.htm的内容,Firefox中的测试正常:
<script>
var albumList=["ipplr/","ipplr2/"] //my test paths
function Get_Slide_Show(Idx) {
//Raw_Album_Info = ''; //do not set, leave as undefined
//alert('Before: ' + Raw_Album_Info);
albumPath = '/home/ken/temp/' + albumList[Idx];
var script = document.createElement('script');
script.src = albumPath + '/album_info.js';
document.head.appendChild(script);
//document.getElementsByTagName('head')[0].appendChild(script);
//alert('After: ' + Raw_Album_Info);
}
function Load_Slide_Show(Idx) {
Get_Slide_Show(Idx);
Load_Album_Info();
}
function Init_Slide_Show() {
Load_Album_List("photos");
Load_Slide_Show(0);
showSlides();
}
</script>
<script>
Get_Slide_Show(0)
updatetest()
function updatetest()
{
if (typeof(Raw_Album_Info)=='undefined'){
setTimeout('updatetest()',500) //call back until defined
}else{
//you can alert, or just write to console to verify
alert(Raw_Album_Info)
console.log(Raw_Album_Info)
}
}
</script>
var albumList=[“ipplr/”,“ipplr2/”]//我的测试路径
功能获取幻灯片放映(Idx){
//原始相册信息=“”;//不设置,保留为未定义
//警报(“之前:”+原始相册信息);
albumPath='/home/ken/temp/'+albumList[Idx];
var script=document.createElement('script');
script.src=albumPath+'/album_info.js';
document.head.appendChild(脚本);
//document.getElementsByTagName('head')[0].appendChild(脚本);
//警报('After:'+原始相册信息);
}
功能加载幻灯片放映(Idx){
获取幻灯片放映(Idx);
加载相册信息();
}
函数初始化幻灯片放映(){
加载相册列表(“照片”);
加载幻灯片放映(0);
放映幻灯片();
}
获取幻灯片放映(0)
updatetest()
函数updatetest()
{
if(typeof(原始相册信息)=“未定义”){
setTimeout('updatetest()',500)//在定义之前回调
}否则{
//您可以发出警报,也可以直接写入控制台进行验证
警报(原始相册信息)
console.log(原始相册信息)
}
}
原始相册信息在文档加载完成之前是未定义的。您可以执行document.readystate调用或其他操作,但下面我使用函数updatetest(),该函数使用setTimeout不断调用自己,直到定义了原始相册信息
在相册_info.js中,使用倾斜的勾号(在~键下方)会有所帮助。在var声明中,勾号位于所需文本的前后。如果您使用tick,那么编写一个简短的脚本就很容易了,它将自动从原始文本文件创建.js文件。例如,如果原始文本文件是album_info.txt,则bash脚本如下所示:
echo -n "var x=\`" > album_info.js
cat album_info.txt >> album_info.js
echo "\`" >> album_info.js
您在问题撰写中的原始专辑信息变量中的破折号错误。也许这只是一个写入错误,但如果该错误实际上存在于您的album_info.js代码中,则会阻止realRaw_album_info变量获得结果。
用于测试的my album_info.js的内容(注意,使用勾号创建.js文件也会保留文本文件中的换行符,因此如果要使用数组,可以在代码中使用var.split('\n'):
出于演示目的,我在顶部创建了一个albumList数组,在底部创建了一个脚本,以便显示一个包含可变内容的弹出窗口。我注释掉了这些警报,因为这个演示不需要它们。我注释掉了Raw\u Album\u Info=',因为它最初需要未定义,以便updatetest()正常工作
test.htm的内容,Firefox中的测试正常:
<script>
var albumList=["ipplr/","ipplr2/"] //my test paths
function Get_Slide_Show(Idx) {
//Raw_Album_Info = ''; //do not set, leave as undefined
//alert('Before: ' + Raw_Album_Info);
albumPath = '/home/ken/temp/' + albumList[Idx];
var script = document.createElement('script');
script.src = albumPath + '/album_info.js';
document.head.appendChild(script);
//document.getElementsByTagName('head')[0].appendChild(script);
//alert('After: ' + Raw_Album_Info);
}
function Load_Slide_Show(Idx) {
Get_Slide_Show(Idx);
Load_Album_Info();
}
function Init_Slide_Show() {
Load_Album_List("photos");
Load_Slide_Show(0);
showSlides();
}
</script>
<script>
Get_Slide_Show(0)
updatetest()
function updatetest()
{
if (typeof(Raw_Album_Info)=='undefined'){
setTimeout('updatetest()',500) //call back until defined
}else{
//you can alert, or just write to console to verify
alert(Raw_Album_Info)
console.log(Raw_Album_Info)
}
}
</script>
var albumList=[“ipplr/”,“ipplr2/”]//我的测试路径
功能获取幻灯片放映(Idx){
//原始相册信息=“”;