首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何动态注入JavaScript函数?

如何动态注入JavaScript函数?
EN

Stack Overflow用户
提问于 2011-04-07 07:37:01
回答 3查看 7.7K关注 0票数 2

我在工作中坚持使用一个界面糟糕的产品,并试图通过Chrome中的UserScripts让它变得令人愉快。为此,我尝试通过UserScripts机制将JavaScript函数注入到页面中:

代码语言:javascript
复制
// find the div
var dropDown = document.getElementById("tstGlobalNavigation_ddlChooseProject");

// inject function
dropDown.innerHTML = dropDown.innerHTML + "<script>function gotoIncident(){alert('111')}</script>";        

// inject a button
dropDown.innerHTML = dropDown.innerHTML + "&nbsp;&nbsp;&nbsp;<input type='button' name='btnSearch' value='Go' onClick='javascript:gotoIncident()' >";

如您所见,我注入了一个按钮和一个函数(gotoIncident),当用户单击该按钮时将触发该函数。

按钮确实出现在屏幕上,但当我单击它时,javascript调试器告诉我没有定义gotoIncident

我遗漏了什么?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2011-05-13 02:40:50

作为参考,我用以下方式解决了这个问题:

代码语言:javascript
复制
myDiv.innerHTML = myDiv.innerHTML + " <input type='text' id='txtSearch' name='txtSearch' style='position:absolute;top:8px;left:800px;width:50px' >";
myDiv.innerHTML = myDiv.innerHTML + " <input type='button' name='btnSearch' value='Go' onclick='fn()' style='position:absolute;top:8px;left:860px;width:35px'>";

addScript("function fn() {var obj = document.getElementById('txtSearch'); "
  + "if (obj != null) { "
  + "  var incidentId = document.getElementById('txtSearch').value; "
  + "  var currentURL = location.href; "
  + "  var splitResult = currentURL.split('/'); "
  + "  var projectId = splitResult[4]; "
  + "  location.href = 'http://site/SpiraTeam/' + projectId + '/Incident/' + incidentId + '.aspx'; "
  + " } }"
  , "fn");

}

票数 -3
EN

Stack Overflow用户

发布于 2011-04-07 07:46:45

<head>中注入一个包含自调用函数的<script>标签:

代码语言:javascript
复制
var head = document.getElementsByTagName('head')[0],
    script = document.createElement('script');
    
script.src = 'path/to/script.js';    
head.appendChild(script);

其中引用的脚本如下所示:

代码语言:javascript
复制
(function(){
    // do your stuff here    
})();

编辑

如何将其作为内联脚本执行:

代码语言:javascript
复制
function fn() {
    alert('hello JS');
}

var head = ...,
    script = ...;
    
// FF doesn't support innerText
script[script.innerText ? 'innerText' : 'textContent'] = '(' + fn + ')()';
head.appendChild(script);
票数 8
EN

Stack Overflow用户

发布于 2011-04-07 07:43:43

您需要在全局作用域中定义函数(将其放在小节中)才能在需要使用它的地方使用它。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5574231

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档