相关疑难解决方法(0)

在JS中动态加载JS

我有一个动态网页,我需要IF在另一个javascript文件中导入一个外部JS文件(在一个条件下).

我试图寻找一个可行的解决方案,但它没有用.

我已经尝试使用JS文件加载到DOM,document.createElement()但它也没有用.显然,Js已加载到DOM中,但在当前的JS文件中无法访问.

jQuery中的解决方案也没问题

javascript jquery

290
推荐指数
10
解决办法
45万
查看次数

Internet Explorer中"script"标记的"onload"处理程序

我一直在使用这个函数将onload处理程序附加到脚本标记,它似乎是互联网上推荐的方式.
然而,如果页面已经加载(在8中测试),它在Internet Explorer中不起作用.您可以看到它在普通浏览器中有效(加载脚本时会触发警报).

我错过了什么吗?
谢谢

javascript internet-explorer onload

51
推荐指数
2
解决办法
6万
查看次数

同步加载和执行javascript代码

有没有办法像同步XMLHttpRequest一样以同步方式加载和执行javascript文件?

我目前正在使用同步XMLHttpRequest,然后使用eval,但调试该代码非常困难......

谢谢你的帮助!

更新

我现在试过这个:

的test.html

<html>
    <head>
        <script type="text/javascript">
            var s = document.createElement("script");
            s.setAttribute("src","script.js");
            document.head.appendChild(s);
            console.log("done");
        </script>
    </head>
    <body>
    </body>
</html>
Run Code Online (Sandbox Code Playgroud)

的script.js

console.log("Hi");
Run Code Online (Sandbox Code Playgroud)

输出:完成嗨

所以它没有同步执行.任何想出"嗨"的想法首先出现?

更新2 其他示例

test.html(脚本标记内的代码)

var s = document.createElement("script");
s.setAttribute("src","script.js");
document.head.appendChild(s);
SayHi();
Run Code Online (Sandbox Code Playgroud)

的script.js

function SayHi(){
    console.log("hi");
}
Run Code Online (Sandbox Code Playgroud)

输出:未捕获的ReferenceError:未定义SayHi

javascript load synchronous

41
推荐指数
4
解决办法
5万
查看次数

onload handler和src的顺序在脚本元素中是否重要?

即将从这个答案,上面写着:

你应该在事件之后设置src属性f.ex:onload

el.onload = function() { //...
el.src = script;
Run Code Online (Sandbox Code Playgroud)

您还应该附加onload事件之前将脚本附加到DOM :

$body.append(el);
el.onload = function() { //...
el.src = script;
Run Code Online (Sandbox Code Playgroud)

请记住,您需要检查readystateIE支持.如果您使用的是jQuery,还可以尝试以下getScript()方法:http://api.jquery.com/jQuery.getScript/

我怀疑相信这将是问题的正确答案.

那么,设置onload处理程序的顺序是src如此重要吗?我认为它们是由浏览器立即评估的,所以我认为之间没有区别:

el.onload = function() { //...
el.src = script;
Run Code Online (Sandbox Code Playgroud)

el.src = script;
el.onload = function() { //...
Run Code Online (Sandbox Code Playgroud)

我对吗?

html javascript

15
推荐指数
1
解决办法
2849
查看次数

使用CDN或外部域在内联脚本上执行脚本文件在HTML注入时

我有一个HTML注入到已加载的DOM的问题,其中在下载脚本文件后加载内联javascript.据我所知,这不应该是异步的,并且内联脚本应该在脚本文件之后执行.如果域名与调用页面相同,则此方法有效,但使用CDN甚至子域也可以执行相同的操作.我是否应该做些什么来改变我如何称呼这些?我发誓这是有效的,因为我有一个多星期的CDN,但也许我从未发现过这个问题.

安慰

Loading Inline Script
VM1400:3 Uncaught TypeError: Cannot read property 'init' of undefined(anonymous function) 
app.members.event.js?v=204&_=1453644424985:5 Loading Script File
app.members.event.js?v=204&_=1453644424985:71 Finished Script File
Run Code Online (Sandbox Code Playgroud)

使用Javascript

<script type="text/javascript" src="https://test.azureedge.net/Areas/Directors/scripts/app.members.event.js?v=204"></script>
<script type="text/javascript">
console.log('Loading Inline Script');
    app.viewModel.members.event.init();
console.log('Finished Inline Script');
Run Code Online (Sandbox Code Playgroud)

javascript dom asynchronous cdn deferred-execution

9
推荐指数
1
解决办法
2083
查看次数

javascript输入事件在谷歌上不起作用

我正在尝试用javascript模拟'enter'按键以实现自动化.

var script = document.createElement('script');
script.src = 'https://code.jquery.com/jquery-1.10.2.min.js';
script.type = 'text/javascript';
document.body.appendChild(script);
var e = jQuery.Event("keypress");
e.which = 13; //choose the one you want
e.keyCode = 13;
Run Code Online (Sandbox Code Playgroud)

这是用于设置键事件的代码(我也尝试过keydown和keyup).

在搜索Google时,这似乎不起作用.如果我输入一些文本并在输入字段上触发事件则$("[name=q]").trigger(e)没有任何反应.

我正在使用谷歌来测试模拟"正确"的输入事件.我希望使用js来自动化skype web客户端.

有谁知道是否可以使用javascript模拟实际的输入按键?我已经看到了Selenide的pressEnter()作品,但它使用的是webdriver所以也许它不相关.

我也尝试过本机js事件触发

var dispatchKeyboardEvent = function(target, initKeyboradEvent_args) {
  var e = document.createEvent("KeyboardEvents");
  e.initKeyboardEvent.apply(e, Array.prototype.slice.call(arguments, 1));
  target.dispatchEvent(e);
};

dispatchKeyboardEvent($("[name=q]"), 'keypress', true, true, null, 'h', 13, '');
Run Code Online (Sandbox Code Playgroud)

sidenote我知道可以通过调用元素上的.submit()来提交查询,但这不是我所追求的.

javascript jquery events

7
推荐指数
1
解决办法
314
查看次数

如何以角度动态加载脚本及其函数

最初,我将以下代码静态保存在 Index.html 中并且它可以工作。

<script src="/le.min.js"></script>
<script>
    LE.init({
        token: 'token',
        region: 'x'
    });
</script>
Run Code Online (Sandbox Code Playgroud)

由于我的要求,我决定动态加载我编写的示例代码。

//loads librabry
jsScript = document.createElement('script');
jsScript.src = `/le.min.js`;
document.head[0].appendChild(jsScript);

//loads initialise function in the script
script = document.createElement('script');
script.innerHtml= `LE.init({
                    token: '${TOKEN}',
                    region: 'US'
                   });`
document.head[0].appendChild(script);
Run Code Online (Sandbox Code Playgroud)

两者都正确附加,但它抛出错误LE is not defined。如果我附加初始化函数脚本,因为type=text没有错误,但不会发生初始化。我怎样才能做到这一点?

javascript angular

2
推荐指数
1
解决办法
6495
查看次数

使Angular 2组件下载并运行脚本

我正在尝试使用MathJax在我的Angular 2应用程序中显示方程式.我的应用程序中只有一小部分实际需要此功能,因此我不希望所有用户都必须下载所需的3-400kb.

我最初的想法是import "mathjax"在我的组件中,因此只有在创建组件时才会加载库.但是,我从我之前的问题中了解到MathJax与其他人不能很好地兼容,因为它使用自己的自定义模块加载器.

我当前的设置script从我的加载,index.html但这意味着当只有一小部分用户需要此组件时,每个人都会下载它

<script src="https://cdn.mathjax.org/mathjax/latest/MathJax.js?config=AM_SVG"></script>
Run Code Online (Sandbox Code Playgroud)

是否有一种干净的方法Angular 2让我的组件在ngOnInit()钩子中下载脚本并在DOM中执行回调?诸如(伪代码)之类的东西:

ngOnInit(){
    //download script, add to DOM      
    fetch('https://...MathJax.js').then(addToDom).then(this.onMathJaxLoaded);
}
onMathJaxLoaded(){
  // Run math renderer
  MathJax.Hub.Queue("Typeset",...);
}
Run Code Online (Sandbox Code Playgroud)

javascript mathjax angular

1
推荐指数
1
解决办法
2004
查看次数