标签页运行脚本 chrome.tabs.executeScript接口运行_doPostBack事件的问题

使用问题 · 1915 次浏览
夜空·青蔷薇 创建于 2022-10-26 18:32

简单来说就是

我有这么一段JS

javascript:setTimeout('__doPostBack(\'ddlDptCode\',\'\')', 0)

在F12的Console中直接输入是好使的

但如果设置在对标签页运行脚本中就不好使了

点进去后如下图

请问是有什么特殊写法吗,还是怎么回事,这段JS是由OnSelectedIndexChanged事件在画面生成的JS脚本,跪求大佬解惑


回复内容
CL 2022-10-26 19:34
#1

网页的脚本,和浏览器扩展里的脚本环境是隔离的,所以模块里不能访问网页里的变量和脚本,只能访问dom元素。目前唯一的办法是在网页里插入script节点,把脚本代码插入到网页中,可以参考这里 https://stackoverflow.com/questions/9515704/access-variables-and-functions-defined-in-page-context-using-a-content-script 

夜空·青蔷薇 2022-10-27 15:23
#2

感谢大佬回答,有了理解,这属于动态JS的范畴

下面写了两个能实行方法的实例以作后来人的参考

//方法一
var actualCode = "setTimeout('__doPostBack(\\'ddlDptCode\\',\\'\\')', 0)";
var script = document.createElement('script');
script.textContent = actualCode;
(document.head||document.documentElement).appendChild(script);
script.remove();
//方法二
(function() {
    var a = 1;
    var s = document.createElement('script');

    s.textContent = "setTimeout('__doPostBack(\\'ddlDptCode\\',\\'\\')', 0)";
    document.documentElement.append(s);
})();

注意:原本执行的JS为

setTimeout('__doPostBack(\'ddlDptCode\',\'\')', 0)

但写进动态JS里面时要对斜线在附加上斜线写成

setTimeout('__doPostBack(\\'ddlDptCode\\',\\'\\')', 0)

该解决方案可以解决更新下拉框select元素的值,网页没有反应的问题,关联问题如下
更新下拉框select元素的值,网页没有反应

关于更新下拉框的具体JS获取,则是HTML文件源码中的OnSelectedIndexChanged事件转换成的JS代码,具体可看下面连接

JS 调用.NET中 服务端控件



回复主贴