相关疑难解决方法(0)

在JS中动态加载JS

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

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

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

jQuery中的解决方案也没问题

javascript jquery

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

为什么window(和unsafeWindow)与用户脚本和<script>标签不一样?

在开发这个小用户时我遇到了一个问题.当我想XMLHttpRequest用我的脚本阻止正在运行的网站中的每一个时,没有发生任何事情(至少在Chrome上):

function main() {
  // Override XHR.open with a custom function
  window.XMLHttpRequest.prototype.open = function() {
    // Nothing... so it's supposed to block every xhr.open() call
  }
}
main();
Run Code Online (Sandbox Code Playgroud)

更换时同样的事情windowunsafeWindow.

然而,当我使用这个小技巧时,一切都像魅力一样:

// No more call to main(), and:
var script = document.createElement("script");
script.textContent = "(" + main.toString() + ")();";
document.body.appendChild(script);
Run Code Online (Sandbox Code Playgroud)

每次调用xhr.open都被我的自定义函数替换,不再需要AJAX.

所以我猜这个window元素在main从脚本内部调用时与从<script></script>容器中调用时的元素不同.有人能解释一下为什么吗?

javascript greasemonkey scope userscripts

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

从Greasemonkey访问变量到页面,反之亦然

我在test.js中有以下代码,它在</ body>之前运行:

alert('stovetop');
alert(greasy);
Run Code Online (Sandbox Code Playgroud)

我在test.user.js中有以下代码:

(function () {

    'use strict';
    var greasy = 'greasy variable';
    document.title = 'greasy title';

}());
Run Code Online (Sandbox Code Playgroud)

'炉灶'得到警报,所以我知道页面javascript工作,并document.title得到更改,所以我知道脚本javascript工作.但是,在网页上我收到错误:

错误:ReferenceError:未定义greasy源文件:/test.js

如何从网页上访问由Greasemonkey设置的变量,反之亦然?

javascript firefox greasemonkey firefox-addon

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

如何动态执行/评估包含ES6模块的JavaScript代码/需要一些依赖项?

我希望我的用户能够在我的JavaScript应用程序中使用JavaScript作为脚本语言.为此,我需要动态执行源代码.

动态执行JavaScript似乎有两个主要选项:

a)使用eval(...)方法(或var func = new Function(...);).

b)<script>向DOM 添加节点(例如,使用$('body').append(...)).

只要我不在import动态执行的源代码中使用任何语句,这两种方法都可以正常工作.如果我包含import语句,我会收到错误消息Unexpected identifier.

要执行的示例用户源代码:

import Atom from './src/core.atom.js':

window.createTreeModel = function(){
   var root = new Atom('root');
   root.createChildAtom('child');
   return root;
}
Run Code Online (Sandbox Code Playgroud)

示例应用程序代码,用于说明该动态代码的可能用法:

a)使用eval

var sourceCode =  editor.getText(); 
window.createTreeModel = undefined;
eval(sourceCode);
var model = window.createTreeModel();
treeView.setModel(model);
Run Code Online (Sandbox Code Playgroud)

b)使用DOM修改:

var sourceCode =  editor.getText(); 
window.createTreeModel = undefined;

var script = "<script >\n"+ 
            sourceCode + "\n" +             
            "</script>";

$('body').append(script); 

var model = window.createTreeModel(); …
Run Code Online (Sandbox Code Playgroud)

javascript eval dynamic-execution es6-modules

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