Javascript 如何使用scriptElement.innerHTML=JSON.stringify创建具有函数名的脚本?

Javascript 如何使用scriptElement.innerHTML=JSON.stringify创建具有函数名的脚本?,javascript,html,jquery,json,Javascript,Html,Jquery,Json,我正在修改两个公共小部件api,它们返回一些股票符号数据。我修改了调用,以便在用户单击链接时填充“符号”值。第一块是他们的例子,我在下面做了修改。很好 { “间隔”:“1m”, “宽度”:425, “isTransparent”:错误, “高度”:450, “符号”:“纳斯达克:AAPL”, “showIntervalTabs”:正确, “locale”:“en”, “颜色主题”:“光” } 你走错了方向。因为您在JavaScript领域,所以不需要创建新的脚本文件来运行某些东西。等待脚本加

我正在修改两个公共小部件api,它们返回一些股票符号数据。我修改了调用,以便在用户单击链接时填充“符号”值。第一块是他们的例子,我在下面做了修改。很好


{
“间隔”:“1m”,
“宽度”:425,
“isTransparent”:错误,
“高度”:450,
“符号”:“纳斯达克:AAPL”,
“showIntervalTabs”:正确,
“locale”:“en”,
“颜色主题”:“光”
}

你走错了方向。因为您在JavaScript领域,所以不需要创建新的脚本文件来运行某些东西。等待脚本加载,然后执行函数

我已经冒昧地使用jQuery重写了您的脚本,当脚本加载时,它与添加的侦听层基本相同。加载脚本时,将使用传递的
符号创建
abc.widget

函数返回jQuery对象中的脚本元素

function createWidgetScriptElement(symbol) {
  var $scriptElement = $('<script>');
  $scriptElement.prop('async', true);
  $scriptElement.prop('src', 'https://abcstocks.com/external-embedding/embed-widget-technical-analysis.js');
  // Create `abc.widget` after the script is appended and loaded.
  $scriptElement.on('load', function() {
    new abc.widget({
      "width": 980,
      "height": 610,
      "symbol": symbol,
      "interval": "D",
      "timezone": "Etc/UTC",
      "theme": "light",
      "style": "1",
      "locale": "en",
      "toolbar_bg": "#f1f3f6",
      "enable_publishing": false,
      "allow_symbol_change": true
    }
  }
  return $scriptElement;
}

太好了,我将重写现有函数并复制第二个函数。我更喜欢jQuery,但只能在第一次使用vanilla js时使用它。非常感谢。我将如何将其应用于一开始的工作代码?将json添加到脚本标记->jQuery,相当于'scriptElement.innerHTML=json'。stringify({})似乎不起作用,有几个错误“未捕获的TypeError:未能在“节点”上执行“appendChild”:参数1不是“节点”类型。“您没有复制我编写的所有部分。”
appendChild
是香草JS,
append
是jQuery。如果出于这一特定原因,您坚持使用香草(没有任何库或框架)JS或专用jQuery,您将省去一些麻烦。将JSON添加到脚本元素只会输出一个字符串,该字符串过去是您的数据,如果您想使用它,则应将其解码回对象,这是没有意义的。已经有
src
的脚本标记不能包含内联JavaScript。不能两者兼得。
$('.mymenuitem').on('click', function(e) {
  var symbol = $(this).attr('data-href');
  var $widgetContainer = $('#widget_market-access_home');
  var $scriptElement = createWidgetScriptElement(symbol);
  $widgetContainer.empty();
  $widgetContainer.append($scriptElement);
  e.preventDefault();
})